C# 无法强制转换类型为';字节';输入';System.UInt64';
C# 无法强制转换类型为';字节';输入';System.UInt64';,c#,C#,byte是否可转换为ulong 似乎是这样。这不会抛出: byte wtf = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()[0]; ulong ffs = (ulong)wtf; 好的,让我们试着将整个数组转换为一个: ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes().Cast<ulong>().ToArray(); ul
byte
是否可转换为ulong
似乎是这样。这不会抛出:
byte wtf = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()[0];
ulong ffs = (ulong)wtf;
好的,让我们试着将整个数组转换为一个:
ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes().Cast<ulong>().ToArray();
ulong[]ip=HttpContext.Connection.RemoteIpAddress.GetAddressBytes().Cast().ToArray();
这个扔
System.InvalidCastException:'无法将'System.Byte'类型的对象强制转换为'System.UInt64'类型。'
嗯??解释器先生,当我要求您对变量wtf
执行此操作时,您怎么可能将System.Byte
强制转换为System.UInt64
,但当我要求您立即对整个数组执行此操作时,您会抱怨吗
老实说,这是怎么回事?我是否已经困了,错过了一些简单的事情?有人能给我解释一下吗?可枚举.Cast的MSDN文档说明如下: 此方法的源序列是IEnumerable,这意味着 元素具有对象的编译时静态类型。唯一的类型 通过此方法执行的转换是引用 转换和取消装箱转换。元素的运行时类型 在集合中,必须与目标类型匹配,或在值的情况下 类型,元素的运行时类型必须是装箱的结果 目标类型的转换其他转换类型,例如 在不同的数字类型之间,不允许使用 因此,它基本上只用于铸造非泛型集合,以使它们可用于LINQ。它仅适用于运行时(或已装箱)已为目标类型的对象,而
字节
和ulong
则不是这种情况,而是对内存中字节的重新解释
您必须使用选择来执行演员阵容:
ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()
.Select(x => (ulong)x).ToArray();
您想使用。请选择(x=>(ulong)x)
<使用code>Cast的另一个原因是:为了完整起见,您还可以执行ulong[]ulongArray=Array.ConvertAll(byteArray,v=>(ulong)v)代码>。执行ulong[]ulongArray=byteArray应该没有实际区别代码>考虑到此处涉及的小数组大小。选择一个而不是另一个将取决于你认为两个中哪一个更具可读性。。。