无法将"System.Byte"类型的对象强制转换为"System.UInt64"类型

gaa*_*kam 4 c#

是否byte转换为ulong

看起来似乎如此.这不会抛出:

byte wtf = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()[0];
ulong ffs = (ulong)wtf;
Run Code Online (Sandbox Code Playgroud)

好的,让我们尝试将整个数组转换为:

ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes().Cast<ulong>().ToArray();
Run Code Online (Sandbox Code Playgroud)

这引发了!?

System.InvalidCastException:'无法将'System.Byte'类型的对象强制转换为'System.UInt64'.'

嗯?解释器先生,当我要求你为变量执行此操作时,你怎么可能能够施展System.Byte,System.UInt64但当我要求你wtf立刻为整个阵列做这个时,你会抱怨?

说实话,这里发生了什么?我已经困了,想念一些简单的东西吗?有人可以向我解释这个吗?

Adr*_*ian 5

MSDN文档Enumerable.Cast<T>说明如下:

此方法的源序列是IEnumerable,这意味着元素具有编译时静态类型的对象.此方法执行的唯一类型转换是引用转化和拆箱转换.集合中元素的运行时类型必须与目标类型匹配,或者在值类型的情况下,元素的运行时类型必须是目标类型的装箱转换的结果.不允许使用其他转换类型,例如不同数字类型之间的转换类型

因此,它只是用于转换非泛型集合以使它们可用于LINQ.它仅适用于那些已经在目标类型的运行时(或盒装)时,这是不是为对象的情况byteulong是什么,而在内存中的字节重新演绎.

你必须用来Select执行演员表:

ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()
              .Select(x => (ulong)x).ToArray();
Run Code Online (Sandbox Code Playgroud)