C# 用泛型包装重载函数

C# 用泛型包装重载函数,c#,generics,overloading,C#,Generics,Overloading,我想用一些额外的功能包装位转换器。但我不必写出所有重载函数,比如 BitConverter.GetBytes(int); BitConverter.GetBytes(double); ... 有没有一种方法可以编写一个模板函数来包装所有重载函数?像 void GetBytes <T> (List<byte> byteList, T value) { .... byte[] result = BitConverter.GetBytes(value);

我想用一些额外的功能包装位转换器。但我不必写出所有重载函数,比如

BitConverter.GetBytes(int);
BitConverter.GetBytes(double);
...
有没有一种方法可以编写一个模板函数来包装所有重载函数?像

void GetBytes <T> (List<byte> byteList, T value) 
{
    ....
    byte[] result = BitConverter.GetBytes(value);
    byteList.AddRange(result);
    return;
}
void GetBytes(列表字节列表,T值)
{
....
字节[]结果=位转换器.GetBytes(值);
byteList.AddRange(结果);
返回;
}
您可以为
IEnumerable
编写一个

class Program
{
    static void Main(string[] args)
    {
        var target = new List<byte>();
        BitConverter.GetBytes(10).AddBytesToTarget(target);
        BitConverter.GetBytes(100d).AddBytesToTarget(target);
    }
}

static public class Extensions
{
    public static void AddBytesToTarget(this IEnumerable<byte> bytes, List<byte> target)
    {
        target.AddRange(bytes);
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var target=新列表();
BitConverter.GetBytes(10).AddBytesToTarget(目标);
BitConverter.GetBytes(100d).AddByTestToTarget(目标);
}
}
静态公共类扩展
{
公共静态void AddBytesToTarget(此IEnumerable字节,列表目标)
{
target.AddRange(字节);
}
}

您不能使用泛型,因为重载解析
位转换器。GetBytes
将失败,因为
T
可以是任何类型

您可以使用
dynamic

void GetBytes(List<byte> byteList, dynamic value) {
    ....
    byte[] result = BitConverter.GetBytes(value);
    byteList.AddRange(result);
}
void GetBytes(列表字节列表,动态值){
....
字节[]结果=位转换器.GetBytes(值);
byteList.AddRange(结果);
}

这会将重载解决延迟到运行时。当然,这也会推动类型检查,因此,如果值使用了无效类型,您将获得运行时异常,而不是编译器错误。

您可以使用动态类型

阅读此链接