河北手机网站制作多少钱,网页的框架结构图,最新新闻热点事件直播,网站转回国内在c#中#xff0c;值对象是没有办法赋值为null的。比如说#xff0c;你想要定义一个布尔值#xff0c;你的赋值数据要么得是true、要么就得是false#xff0c;默认情况下我们永远没可能给这个布尔赋值为null#xff0c;即使只是对这个变量进行声明而不初始化数据#xff…在c#中值对象是没有办法赋值为null的。比如说你想要定义一个布尔值你的赋值数据要么得是true、要么就得是false默认情况下我们永远没可能给这个布尔赋值为null即使只是对这个变量进行声明而不初始化数据c#编译器也会给他在声明的同时赋予默认的初始化数据。布尔的初始化数据为false整数、浮点数为0。
不过在实际工作中我们难免会遇到需要给值类型对象赋值为null的情况。比如说我们在数据库有个客户列表保存了客户的姓名、电话、出生日期等数据而出生日期不是必选项所以在数据库中有可能存在客户没有留下生日的情况。
出生日我们需要使用DateTime类型来处理但是DateTime类型在c#中是值类型对象struct没有办法赋值为null。所以对于没有出生日期的情况反应在代码中我们就需要给DateTime做一些特殊处理让他可以赋值为null了。
一、Nullable
C#为类似上述情况提供的专门进行空处理的可空类型Nullable位于system命名空间中。
1、Nullable的使用
可空类型的创建
Nullable的使用方式很简单以DateTime为例在Nullable后面加上箭头括号泛型为DateTime。现在我们的date变量就可以被设置为null了。
NullableDateTime date null;因为可控类型很常用因此c#还很贴心得给这种类型设计了独特的语法接口通过语法糖来简化代码。
DateTime? date null;2、Nullable的常用成员
bool HasValueNullable类型的属性成员用于判断是否为空。
T ValueNullable类型的属性成员返回承载当前值的对应类型对象如果为null则抛出异常。
T GetValueOrDefault()Nullable类型的方法成员当为null时返回承载默认值的对应类型对象当不为null时候返回承载当前值的对应类型对象。
class Program
{static void Main(string[] args){DateTime? date null;Console.WriteLine(date.GetValueOrDefault());date new DateTime(2022, 1, 2);if (date.HasValue){Console.WriteLine(date.Value);}}
}注意不能把一个Nullable的Datetime直接赋值给普通的Datetime因为他们两者的类型是截然不同的c#编译器不知道应该怎么处理这种情况。
二、合并运算符 ??
现在假设有一个需求打印NullableDateTime变量date的日期但有个要求就是只有date有数据的时候才显示date的日期否则显示今天的日期。如果不使用合并运算符一般会写成如下代码
static void Main(string[] args)
{DateTime? date null;if (date ! null){Console.WriteLine(date.GetValueOrDefault());}else{Console.WriteLine(DateTime.Today);}
}在实际工作中我们有大量的代码都需要做类似的处理先进行非空判断然后再执行逻辑。不过这坨代码其实很啰嗦对于可空数据的处理c#提供了一个非常强大的语法结构进行处理就是连续使用两个问号即合并运算符??。
语法变量a ?? 变量b/表达式
连续两个问号是Coalescing Operator中文叫做合并运算。这是一个逻辑操作符当左侧的变量为null时他将会返回合并操作符右侧数据否则合并操作将会提取左侧的变量的真实数据并且返回这个数据。于是上面的代码就可以简写为
static void Main(string[] args)
{DateTime? date null;var result date ?? DateTime.Today;Console.WriteLine(result);
}