ric*_*cky 4 c# casting implicit-conversion
为什么C#不能将long var隐式转换为对象var然后转换为ulong?
long a = 0;
Object c = a;
ulong b = (ulong)c; // throw exception here
Run Code Online (Sandbox Code Playgroud)
你只能拆箱到与盒装完全相同的类型
Object c = a
Run Code Online (Sandbox Code Playgroud)
盒子a很长
ulong b = (ulong)c;
Run Code Online (Sandbox Code Playgroud)
尝试将unbox c作为ulong但是它很长并因此失败.
ulong b = (ulong)((long)c);
Run Code Online (Sandbox Code Playgroud)
会工作,因为它取消了c长.如果长,这将起作用,你可以长期投入到ulong
如果您输入值类型T,则只能将其作为自身或Nullable(T?)取消装箱.任何其他演员表无效.
那是因为来自对象的强制转换永远不能被解释为转换,而是long和ulong之间的转换.
所以这是合法的:
var c = (long) b;
Run Code Online (Sandbox Code Playgroud)
这也是合法的:
var c = (long?) b;
Run Code Online (Sandbox Code Playgroud)
但这不是:
var c = (ulong) b;
Run Code Online (Sandbox Code Playgroud)
要做你想做的事,你必须投两次:第一次只是拆箱,第二次是实际转换:
var c = (ulong)(long) b;
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Eric Lippert撰写的此博客文章.
| 归档时间: |
|
| 查看次数: |
3426 次 |
| 最近记录: |