为什么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 –