byte
是否可以转换为ulong
?
似乎是这样。这不会抛出:
byte wtf = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()[0];
ulong ffs = (ulong)wtf;
好的,让我们尝试将整个数组转换为一个:
ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes().Cast<ulong>().ToArray();
这会扔!?
System.InvalidCastException:'无法将类型为'System.Byte'的对象转换为类型为'System.UInt64'。”
嗯?解释器先生,当我要求您对变量System.Byte
执行此操作时,如何将System.UInt64
强制转换为wtf
,但是当我要求您对变量pandas
执行此操作时,您一次抱怨整个阵列吗?
老实说,这是怎么回事?我已经困了,想念一些简单的东西吗?有人可以对我解释一下吗?
答案 0 :(得分:5)
Enumerable.Cast<T>
的MSDN文档规定以下内容:
此方法的源序列是IEnumerable,这意味着 元素具有对象的编译时静态类型。唯一的类型 通过此方法执行的转换是参考 转换和拆箱转换。元素的运行时类型 集合中的值必须与目标类型匹配,或者在值的情况下 类型,元素的运行时类型必须是装箱的结果 目标类型的转换。 其他转化类型,例如那些 不允许使用不同的数字类型
因此,从根本上讲,只有将非泛型集合转换为可用于LINQ才可以。它仅适用于在运行时(或装箱)已经具有目标类型的对象,而byte
和ulong
则不是这种情况,而是对内存中字节的重新解释
您必须使用Select
进行强制转换:
ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()
.Select(x => (ulong)x).ToArray();