Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法强制转换类型为';字节';输入';System.UInt64';_C# - Fatal编程技术网

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应该没有实际区别考虑到此处涉及的小数组大小。选择一个而不是另一个将取决于你认为两个中哪一个更具可读性。。。