C# 使用int? 来确保值类型也可以为null

转载地址:https://www.cnblogs.com/xuyouyou/p/13151717.html

基元类型需要为null,考虑两个场景:

1、数据库中一个int字段可以被设置为null。在C#中,值被取出来后,需要先判断一下是否为null,不然把null赋值给int类型会引发异常。

2、在一个分布式系统中,服务器需要接收并解析来自客户端的数据,一个int类型数据在传输过程中可能会丢失或者被篡改,转型失败后应该保存为null值,而不是提供一个初始值。

从.net 2.0开始,FCL提供了一个可以为空的类型Nullable,它是结构体:

[Serializable]
[TypeDependency("System.Collections.Generic.NullableComparer`1")]
[TypeDependency("System.Collections.Generic.NullableEqualityComparer`1")]
public struct Nullable<T> where T : struct

一个可以为空的int类型声明:

 Nullable<int> i1 = null;
 int? i2 = null;

int?是Nullable的简写,两者可以相互转换。

可以为null的类型表示其在基础值类型的正常范围内的值再加上一个null值。例如,Nullable,其值的范围为-2147483648~2147483647,再加上一个null值。

基元类型可以直接隐式转换为可空类型

 int? i = null;//可空类型
 int j = 0;//基元类型
 i = j;

反过来,可空类型转换成基元类型不能隐式转换,因为可空类型(值范围更大)可能为null值,不能赋值给基元类型,需要判断是否为null:

int? i = null;//可空类型
int j;//基元类型
if (i.HasValue)//判断是否有值
{
    j = i.Value;//把值赋值给基元类型
}

其中第三行到第六行可用??运算符简写:

 int? i = null;//可空类型
 int j;//基元类型
 j = i ?? 0;//如果i有值则将i.Value赋值给j;否则就给j赋值为0.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值