c# – 如何使用泛型将参数传递给非泛型方法?
发布时间:2020-12-15 06:44:38 所属栏目:百科 来源:网络整理
导读:为什么以下代码无法编译? 如何创建一个泛型方法,根据泛型类型是“int”,“bool”,“char”等来调用适当的“BitConverter.GetBytes”重载? 更一般地说,如何创建一个基于泛型参数类型调用非泛型方法的泛型方法? using System;public class Test{ public sta
为什么以下代码无法编译?
如何创建一个泛型方法,根据泛型类型是“int”,“bool”,“char”等来调用适当的“BitConverter.GetBytes”重载? 更一般地说,如何创建一个基于泛型参数类型调用非泛型方法的泛型方法? using System; public class Test { public static void Main() { var f = new Foo(); f.GetBytes(10); // should call BitConverter.GetBytes(int); f.GetBytes(true); // should call BitConverter.GetBytes(bool); f.GetBytes('A'); // should call BitConverter.GetBytes(char); } } public class Foo { public byte[] GetBytes <TSource> (TSource input) { BitConverter.GetBytes(input); } } 解决方法
通常,您不能,除非有问题的方法将System.Object作为参数.问题是泛型不仅限于方法调用参数允许的类型. 您最接近的是使用运行时绑定: public byte[] GetBytes <TSource> (TSource input) { dynamic obj = input; BitConverter.GetBytes(obj); } 这会将方法绑定逻辑推送到运行时,如果没有适当的方法可以调用,则会抛出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |