8
我刚从一个让我疯狂的同事得到了这个测验。对于这个代码片段:可空类型GetType()抛出异常
var x = new Int32?();
string text = x.ToString(); // No exception
Console.WriteLine(text);
Type type = x.GetType(); // Bang!
为什么在第一部分的ToString()的工作没有出现任何的异常,然后调用的GetType()抛出一个NullReferenceException?
好吧..但是,为什么然后用最后一行替换:var boxed =(Int32)x;抛出InvalidOperationException而不是?是不是拳击,应该抛出同样的例外? – kabaros
@kabaros:不,根本不是拳击 - “Int32?”和“Int32”都不是引用类型。这是C#4规范第6.2.3节中描述的明确转换。 –
哦,当然,这是非常有道理的。非常感谢。顺便说一句好书,所以你原谅我们疯狂:) – kabaros