【发布时间】:2016-11-08 07:16:28
【问题描述】:
我正在尝试创建以下函数:
public static byte[] ValueToBigEndian<T>(T data)
{
byte[] bytes;
// We want to use big endian
if (BitConverter.IsLittleEndian)
{
bytes = BitConverter.GetBytes(data).Reverse().ToArray();
//bytes.Take(System.Runtime.InteropServices.Marshal.SizeOf(data)); // probabl don't need this
}
else
{
// Host is big endian already
bytes = BitConverter.GetBytes(data;
//bytes.Take(System.Runtime.InteropServices.Marshal.SizeOf(data)); // probabl don't need this
}
return bytes;
}
所以我在这里使用BitConverter.GetBytes(...),它不是通用的,但它有很多重载(ushort、int、bool、ulong、long、short 等... )。
我试图避免为每一个编写匹配的重载函数,所以我的想法是使用泛型函数。恕我直言,这将运行良好,直到有人尝试使用不在重载列表中的类型,然后编译器会抱怨。但是编译器会立即抱怨,因为T 类型没有重载。
我得到的错误是
错误 CS1503 参数 1:无法从 'T' 转换为 'bool'
有没有办法实现我在这里尝试的目标?
【问题讨论】:
-
您不能这样做,编译器需要知道
T可以是什么,以便解析对GetBytes的调用。由于T可以是任何类型(来自签名),object或任何其他类型也是可能的,而GetBytes没有这样的重载。所以我想你想做的事情是不可能的,你被困在使用重载上。