略有不同的是 var a = ((string)null).ToString();-它编译但会抛出 NullReferenceException。在这种情况下,抛出异常是因为不允许对空值使用 .运算符。在这里使用 ?.是可行的(但是在本例中不执行 ToString)。编译器将正确地“创建”变量 a作为字符串。
另一个有趣的事实是,在 C #/. NET 对待 null的方式并不总是相同的中,如果考虑到不同的数据类型,例如:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());