用泛型包装重载函数
本文关键字:函数 重载 包装 泛型 | 更新日期: 2023-09-27 18:10:11
我想用一些额外的功能包装BitConverter。但是我不需要写出所有的重载函数比如
BitConverter.GetBytes(int);
BitConverter.GetBytes(double);
...
是否有一种方法来编写一个单一的模板函数包装所有的重载函数?像
void GetBytes <T> (List<byte> byteList, T value)
{
....
byte[] result = BitConverter.GetBytes(value);
byteList.AddRange(result);
return;
}
我想您可以为IEnumerable<byte>
编写一个扩展方法:
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);
}
}
不能使用泛型,因为T
可以是任何类型,所以BitConverter.GetBytes
的重载解析会失败。
您可以使用dynamic
:
void GetBytes(List<byte> byteList, dynamic value) {
....
byte[] result = BitConverter.GetBytes(value);
byteList.AddRange(result);
}
这将把重载解析推迟到运行时。当然,这也推动了类型检查,所以如果value使用了无效的类型,你会得到一个运行时异常,而不是编译器错误。
可以使用动态类型
阅读MSDN的链接