爲什麼C#不能將long var隱式轉換爲對象var然後是ulong?將長對象轉換爲對象
long a = 0;
Object c = a;
ulong b = (ulong)c; // throw exception here
爲什麼C#不能將long var隱式轉換爲對象var然後是ulong?將長對象轉換爲對象
long a = 0;
Object c = a;
ulong b = (ulong)c; // throw exception here
簡單和簡單的答案:beacuse長和ulong不是相同的類型。一個是長簽名,另一個是無簽名長簽名。
如果您填入值類型T,則只能將其作爲自身或作爲Nullable(T?)進行拆箱。 其他演員無效。
這是因爲來自對象的強制轉換永遠不會被解釋爲轉換,而是long和ulong之間的轉換。
因此,這是合法的:
var c = (long) b;
這也是合法的:
var c = (long?) b;
但是,這並不:
var c = (ulong) b;
做你想做什麼,你必須投了兩次:第一次只拆箱,第二次是實際轉換:
var c = (ulong)(long) b;
欲瞭解更多信息,請參閱blog post by Eric Lippert。
看到這個問題:http://stackoverflow.com/questions/1080945/why-cant-i-pull-a-ushort-from-a-system-object-and-then-cast-it-as-a -uint -c/1080957#1080957 –