bon*_*nfo 5 .net c# casting value-type
可能重复:
为什么这种转换不起作用?
嗨,我发现了一个奇怪的框架行为.此代码抛出异常:
byte a = 1;
object b = a;
Console.WriteLine(b.GetType());
Console.WriteLine((byte)b);
Console.WriteLine((int)(byte)b);
Console.WriteLine(Convert.ToInt32(b));
Console.WriteLine((int)b);
Run Code Online (Sandbox Code Playgroud)
最后一行抛出System.InvalidCastException.
我想知道框架中使这段代码非法的机制是什么.
这是装箱/拆箱的问题吗?!
是的,盒装值类型只能拆箱到完全相同的类型.
该变量b是盒装的byte.
(int)(byte)b取消装箱b回到a byte然后将未装箱byte转换为int.(int)b你试图b直接拆箱int,这是非法的.编辑...
正如Jon在他的回答中提到的那样,有些情况下你不必将unbox打包成完全相同的类型.特别:
T可以取消装箱Nullable<T>.Nullable<T>可以拆箱到T,假设为空的实际上不是null.enum装有底层类型的盒子T可以取消装箱T.T可以取消装箱到enum底层类型T.| 归档时间: |
|
| 查看次数: |
2282 次 |
| 最近记录: |