超越Cast
和As
C#转换为可空类型?
- 之间的定期无聊区别,如果我知道是苹果是水果这样我就可以用
(Fruit)apple
- 如果它不是,它抛出一个异常 as value
可以检查是否成功[不会抛出异常...]
不过的Ive阅读@EricLippert article这件事,有关于空值类型一个很好的例子:
short? s = (short?)123;
int? i = s as int?;
这不会编译...
无法将类型“短? “到'int?'通过参考转换,装箱转换,拆箱转换,包装转换或空类型转换
很好。
那么,为什么这样的:
short? s = (short?)123;
int? i = (int?)s;
是否编译? (!事与愿违我知道是s
不int?
- 它应该去BANG但它不是...)
的演员在这里检查要远远超过前者例如更致命的(其中又以爆炸)
我不好意思问这个话题很多。
在此先感谢。
您描述了Eric Lippert所写的内容 - 该类型将会编译,而'as'操作符不适用于可空类型的情况。 – Yahia 2012-04-08 18:55:04
@Yahia但我们是否同意short不是INT? – 2012-04-08 18:59:09
短不是int BUT可以被转换/转换为int - 这就是你要告诉编译器:make this short int。 – Yahia 2012-04-08 19:01:11