在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
MSDN说: 可空类型可以表示基础类型的所有值,另外还可以表示 null 值。可空类型可通过下面两种方式中的一种声明: 1、System.Nullable<T> variable 2、T? variable T 是可空类型的基础类型。T 可以是包括 struct 在内的任何值类型;但不能是引用类型。 有关可能使用可空类型的示例,请考虑普通的布尔变量如何能够具有两个值:true 和 false。不存在表示“未定义”的值。在很多编程应用中(最突出的是数据库交互),变量可存在于未定义的状态。例如,数据库中的某个字段可能包含值 true 或 false,但是它也可能根本不包含值。同样,可以将引用类型设置为 null,以指示它们未初始化。 可空类型修饰符使 C# 能够创建表示未定义值的值类型变量。
代码
using System;
public class arpu { private string myname; private int? age=null; private int? male=null; public string MyName { get { return myname; } set { myname = value; } } public int? Age { get { return age; } set { age = value; } } public int? Male { get { return male; } set { male = value; } } public arpu(string name) { myname = name; } public void output(string str) { Console.WriteLine("姓名:{0}",myname); Console.WriteLine("年龄:{0}",age==null?str:age.ToString()); Console.WriteLine("性别:{0}",male==null?str:(male==1?"男":"女")); } } public class test { static void Main(string[] args) { arpu a = new arpu("刘锋"); a.Male = 1; a.Age = 24; a.output("空"); arpu b = new arpu("小甜"); b.Male = null; b.Age = null; b.output("未知"); } }
1.值类型后加问号表示此类型为可空类型,如int? i = null; 运算符:
代码
using System;
namespace Magci.Test.Operators { public class TestNull { public static void Main() { //值类型后加问号表示此类型为可空类型 int? a = null; int? b = a + 1; int? c = a * 2; Console.WriteLine("b = " + b); Console.WriteLine("c = " + c); //比较可空类型时,只要一个操作数为null,比较结果就为false int? i = null; int? j = 2; if (i < j) { Console.WriteLine("i < j"); } else if (i >= j) { Console.WriteLine("i >= j"); } else { Console.WriteLine("i and j can not be compared!"); } } } }
有关C#可空类型的几个例子(源代码):点击下载
可空类型允许变量包含未定义的值。在使用数据库和其他可能包含未含有具体值的元素的数据结构时,可以使用可空类型。对于我们使用数据库作为后端的应用程序来说,这一点尤其有用。举个例子,对于人员信息来说,姓名可能是必不可少的,而其他信息比如年龄、性别等用户可以不填,也就是说在数据库中可以为空。 从前在我们为人员信息生成了一个类型化的数据集之后,要从中读取一个可以为空的信息时,我们必须首先判断它是否为空,例如:
而要将该字段设为空,也必须调用专用的方法,如:
这种限制使得我们在开发过程中要相当小心,并且需要使用相当多的或许是不必要的代码来防止错误发生。在引入了可空类型之后,我们的开发就变得轻松多了。所要做的只是在类型声明后面加上一个?号: int?number;
如果探究可空类型的原理,我们就会发现它其实是泛型的杰作。可空类型是System .Nullable结构的实例。可空类型可以表示其基础值类型正常范围内的值,再加上一 个null值。例如,Nullable
在不想使用泛型的写法来写的时候,我们就可以用数据类型加上问号这种等效写法来写,如Nullable 在使用的时候要注意如下几点:
(1)因为可空类型可能为空,于是很多运算法则将不再简单适用,比如A+B,如果A或者B当中有一个或者两个为可空类型,那么它们便不能简单相加,因为它们可能会为空,这时结果也就可能会为空,所以一定要先使用HasValue属性测试是否为空,或者使用GetValueOrDefault属性返回该基础类型所赋的值或默认值,再或者使用??运算符分配默认值,当前值为空的可空类型被赋值给非空类型时将应用该默认值,比如int?x=null;int y=x??-1;,但是切不可直接进行运算。
(2)可空类型可以强制转换为对应的基础类型,比如int?x=3;int y=(int)x;,但在转换之前一定要先测试是否不为空,如果为空的话就会出错。
(3)由于以上两点原因,建议不要随意使用可空类型,只在必要的时候才使用,使用时一定要小心谨慎,随时记得判断是否为空。
示例:
代码
using System;
using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> ///Class1 的摘要说明 /// </summary> public class Class1 { public int? _id; public int? Id { get { return _id; } set { _id = value; } } public Class1() { // //TODO: 在此处添加构造函数逻辑 // } }
代码
using System;
using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class Default6 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Class1 c = new Class1(); Response.Write(c._id+"<br>"); Response.Write(c.Id);//结果什么都没有输出,在类的成员变量(全局变量),可控类型默认值为null,如果是非可空的int类型默认值为0. } }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论