int n = 10;
string s = "hello";
//n = null; 编译器报错
//s = null;
int? n1 = 10;
n1 = null;//正常编译
原理:
在编译时int?时,其等价于Nullable<int32>,也就是范型结构体。
在使用的时候,int? n1 = 10;等价于下面:
Nullable n1;
n1.HasValue = true;
n1.Value = 10;
同时,Nullable<int> n = null就是n.HasValue = false.
注意事项:
int?属于值类型,不属于引用类型,因此
string? s = "abc";//编译器会报错。因为图中T属于结构体,结构体数据值类型,string无法转换为T。