[英]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.Byte
為System.UInt64
,但是當我要求你立即為整個陣列執行此操作時,你會抱怨?
說實話,這里發生了什么? 我已經困了,想念一些簡單的東西嗎? 有人可以向我解釋這個嗎?
Enumerable.Cast<T>
的MSDN文檔聲明如下:
此方法的源序列是IEnumerable,這意味着元素具有編譯時靜態類型的對象。 此方法執行的唯一類型轉換是引用轉化和拆箱轉換。 集合中元素的運行時類型必須與目標類型匹配,或者在值類型的情況下,元素的運行時類型必須是目標類型的裝箱轉換的結果。 不允許使用其他轉換類型,例如不同數字類型之間的轉換類型
因此,它只是用於轉換非泛型集合以使它們可用於LINQ。 它僅適用於在運行時(或盒裝)中已經是目標類型的對象,而不是byte
和ulong
的情況,而是對內存中字節的重新解釋。
您必須使用Select
來執行強制轉換:
ulong[] ip = HttpContext.Connection.RemoteIpAddress.GetAddressBytes()
.Select(x => (ulong)x).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.