5.使用int?来确保值类型也可以为null

基元类型为什么需要为null?
(1)数据库中一个int字段可以被设置为null。在C#中,值被取出来后,为了将它赋值给int类型,不得不首先判断一下它是否为null。如果将null直接赋值给int类型,会引发异常。
(2)在一个分布式系统中,服务器需要接收并解析来自于客户端的数据。一个int型数据可能在传输过程中丢失或被篡改了,转型失败后应该保存为null值,而不是提供一个初始值。
从.NET 2.0开始,FCL中提供了一个额外的类型:可以为空的类型Nullable。它是一个结构体

[SerializableAttribute]  
public struct Nullable where T : struct 

一个可以为空的int类型表示为:

Nullable i = null; 

也可以表示为:

int? i = null; 

语法T?是Nullable的简写,两者可以相互转换。可以为null的类型表示其基础值类型正常范围内的值再加上一个null值。例如,Nullable,其值的范围为-2147483648 ~ 2147483 647,再加上一个null值。

下面是可空类型和基元类型的互相转换。基元类型提供了其对应的可空类型的隐式转换:

int? i = null;  
int j = 0;  
i = j; 

反过来,可空类型不可隐式转换为对应的基元类型,正确的转换形式如下:    

int? i = 123;  
int j ;  
if (i.HasValue)  
{  
   j = i.Value;  
}  
else  
{  
   j = 0;  
} 

这段代码看上去有点烦琐,所以,在阐述可空类型的时候,不得不提到??运算符。??最大的用处就是将可空类型的值赋值给对应的基元类型进行简化,上文代码的一个简化形式就是:

 int? i = 123;  
 int j = i ?? 0; 	

int j = i ?? 0;表示的意思是,如果i的HasValue为true,则将i的value赋值给j;否则,就给j赋值为0。

你可能感兴趣的:(C#代码规范,c#)