河南省住房建设厅网站,佛山网站建设哪里好,wordpress 模板语言包,做网站要先做商标吗在C#1.x的版本中#xff0c;一个值类型变量是不可以被赋予null值的#xff0c;否则会产生异常。在C#2.0中#xff0c;微软提供了Nullable类型#xff0c;允许用它定义包含null值#xff08;即空值#xff09;的数据类型#xff0c;这对处理数据库中包含可选字段以及很多… 在C#1.x的版本中一个值类型变量是不可以被赋予null值的否则会产生异常。在C#2.0中微软提供了Nullable类型允许用它定义包含null值即空值的数据类型这对处理数据库中包含可选字段以及很多方面都有很大帮助。 定义Nullable类型 定义一个nullable类型非常类似于定义一个非nullable类型。不同之处在于使用类型修饰符“”。比如定义一个整型如下int myInt 1;要使一个整型变量可以存储一个null值可以如下声明int? myNullableInt 1;这两个变量看起来似乎是一样的。但事实并非如此。实际上Nullable类型是一个结构体它有两个公开可读字段HasValue和Value。HasValue是一个布尔值当有值存储时它为真当变量值为null时HasValue为假。当HavValue为真是时可以取得变量的值为假时当尝试取得变量的值时会抛出一个异常。 现在null是C#的一个关键字,它可以被赋给一个Nullable型变量。下面是对Nullable型变量赋值的两种有效方式。double? myDouble 3.14159; double? myOtherDouble null; 可以看到myDouble被赋给一个值它也可以被赋以null。在第二个语句中myOtherDouble被初始化为null——在一个非Nullable型变量中这样做会无法通过编译。 使用nullable类型 一个Nullable型变量可以像一般值类型那样使用。在编译过程中Nullable型变量和非Nullable型变量会进行隐式田转换。就是说我们可以把一个标准整型赋给一个整型Nullable变量反之亦然。参考下面示例代码 int? nFirst null; int Second 2; nFirst Second;// 可以 nFirst 123;// 可以 Second nFirst;//编译错误:无法将int?隐式转换成int. //应该: Second nFirst.Value;或 Second (int)nFirst; 还可以利用Nullable型变量的HasValue属性。 if (nFirst.HasValue) Second nFirst.value;如上所示如果nFirst 含有一个值这个赋值语句就会运行否则就会跳过。 在Nullable值中使用操作符Lifed Operators【1】 两个相同类型的Nullable型和非Nullable型变量除了可以相互自动转化之外还可以通过操作符在它们中进行操作。参考下面代码 代码 int ValA 10;int? ValB 3;int? ValC ValA * ValB;//ValC30 int ValA 10;int? ValB null;int? ValC ValA * ValB;//ValCnull int ValA 10;int? ValB null;int? ValC ValA ValB;//ValC仍然是null; 可以看到两个操作数只要有任何一个是null得到的结果也一定是null不管是加减还是乘除。当然如果操作数不是null 则结果还是按原来操作符运算得到的结果。 在上面的代码中如果ValC不是Nullable类型情况会怎么样呢如以下代码 int ValA 10; int? ValB 3; int ValC ValA * ValB;//编译错误:无法将int?隐式转换成int. ValA * ValB的结果是null它不能被赋给一个非Nullable变量ValC。 关系运算 两个都是null值的Nullable变量被认为是相等的而一个值为null的变量和其它任何非null值的变量都是不相等的。如下面示例代码 int abc 123;int xyz 890; int? def null;int? uvw 123; ComparisonResultabc xyz// falseabc def// falsedef null// true abc uvw// trueuvw null// falseuvw ! null// true 在其它关系运算中如果其中一个或两个操作数为null则结果一定是false。如下面示例代码仍然使用上面定义的变量 ComparisonResult abc uvw// false, they are equalabc def// false, def is nulluvw def// false, because def is nulldef null// false, because right side is nulluvw null// false, because right side is null 移除空值 C#2.0同时也提供一个新操作符’??’用来合并空值。其语法格式如下returnValue first ?? second;在这个语句中如果first为非null则first的值会被赋给returnValue如果first为null则second会被赋给returnValue。注returnValue可以是Nullable类型也可以是非Nullable类型。 如果要将一个Nullable变量的值赋给一个非Nullable变量可以用下面方法int? ValA 123;int? ValB null; int NewVarA ValA ?? -1;int NewVarB ValB ?? -1;上面这段代码运行完以后NewVarA的值为123因为ValA的值不是null。而NewVarB值变为 -1因为ValB为null。这就允许我们利用一个null值将一个变量转变成一个默认值。在上面的代码中这个默认值为 -1。