是的,标题没错。C#其中一份新提案假定,所有的引用类型在默认情况下都是不可空的。在新语法下,你需要显式地标明一个引用变量是可空的,像对值类型所做的那样。
和值类型一样,T是指不可空类型,而T?是指可空类型。以下情况会产生警告:
· 取消对可空变量的引用;
· 一个可空变量或参数被赋值给一个不可空变量;
· 从T?[]转换到T[];
· 从T[]转换到T?[];
· 将一个空字面量赋值给一个不可空变量或参数;
· 构造函数没有给所有的不可空字段赋值;
对于前两种情况,如果你使用了感叹号运算符(x!)或者编译器能够证明已经执行了null检查,那么警告