为什么以下代码无法编译?
如何基于泛型类型是“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
作为参数,否则您不能这样做。问题在于,泛型并不仅限于方法调用参数所允许的类型。
您可以执行的最接近的操作是使用运行时绑定(bind):
public byte[] GetBytes <TSource> (TSource input)
{
dynamic obj = input;
BitConverter.GetBytes(obj);
}
这将方法绑定(bind)逻辑推到运行时,如果没有合适的方法要调用,则会抛出该异常。
关于c# - 如何使用泛型将参数传递给非泛型方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23251995/