簡體   English   中英

無法將“System.Byte”類型的對象強制轉換為“System.UInt64”類型

[英]Unable to cast object of type 'System.Byte' to type 'System.UInt64'

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'。'

嗯? 解釋器先生,當我要求你為變量wtf執行此操作時,你怎么可能將System.ByteSystem.UInt64 ,但是當我要求你立即為整個陣列執行此操作時,你會抱怨?

說實話,這里發生了什么? 我已經困了,想念一些簡單的東西嗎? 有人可以向我解釋這個嗎?

Enumerable.Cast<T>的MSDN文檔聲明如下:

此方法的源序列是IEnumerable,這意味着元素具有編譯時靜態類型的對象。 此方法執行的唯一類型轉換是引用轉化和拆箱轉換。 集合中元素的運行時類型必須與目標類型匹配,或者在值類型的情況下,元素的運行時類型必須是目標類型的裝箱轉換的結果。 不允許使用其他轉換類型,例如不同數字類型之間的轉換類型

因此,它只是用於轉換非泛型集合以使它們可用於LINQ。 它僅適用於在運行時(或盒裝)中已經是目標類型的對象,而不是byteulong的情況,而是對內存中字節的重新解釋。

您必須使用Select來執行強制轉換:

ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()
              .Select(x => (ulong)x).ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM