理解null值和可空类型
来源:互联网 发布:全知视角和有限视角 编辑:程序博客网 时间:2024/06/01 15:35
C#允许将null值赋给任意引用变量,值为null的变量表明该变量不引用内存中的任何对象,
Circle c = new Circle(42);Circle copy =null; // 声明的同时进行初始化...if(copy == null){ copy = c; // copy 和 c引用同一个对象 ...}
C#6.0新增了空条件操作符来更简洁的测试空值,使用它需要为变量名附加问号(?)前缀 例如 ,以下代码在Circle 对象包含空值的时候调用其Area方法:
Circle c = null;Console.WriteLine($"The area of circle c is {c.Area()}");
这造成Circle.Area方法抛出一个NullReferenceException, 这很合理,因为无法计算不存在的一个圆的面积,为了避免该异常,可以先检测Circle对象是否为null,再决定是否调用其Area方法:
if(c != null){ Console.WriteLine($"The area of circle c is {c.Area()}");}
如果c为空,就不会向命令提示窗口写入任何内容 还可在尝试调用CircleArea之前在Circle对象上使用空条件操作符:
Console.WriteLine($"The area of circle c is {c?.Area()}");
空条件操作符告诉”运行时”在操作符所应用的变量为null的前提下忽略当前语句,在本例中,命令提示窗口会显示以下文本:
The area of circle c is
使用可空类型
null值在初始化引用类型非常有用,但null本身就是引用,不能把它赋给值类型,
int i = null; // 非法int? i = null; // 合法
但是利用C#定义的修饰符(?),可以将变量声明为可空值类型
可空类型公开了两个属性,用于判断类型是否实际包含非空的值,以及该值是什么, 其中 ,
HasValue属性判断可控类型是否包含一个值,还是包含null,如果包含值,可用Value属性获取该值
int? i = null;...if(!i.HaValue){ // !取反 如果i不包含值 为null,就将99赋值给它 i = 99;}else{ //如果i不为null,就显示它的值 Console.WriteLine(i.Value);}
阅读全文
0 0
- 理解null值和可空类型
- 可空类型 ?和??
- C# 值类型与引用类型 null与可空类型
- 深入理解C#---1.可空类型
- NULL和空值
- c# 值类型后面加问号表示可为空null(Nullable 结构)
- C#值类型后面加问号表示可为空null(Nullable 结构)
- C#值类型后面加问号表示可为空null(Nullable 结构)
- C#可空类型,int可以为null.
- 关于空指针(指针指向为NULL)和void类型的指针的理解
- C#_可空类型及空接合运算符(2.0)(如何给int赋null值,Int? 有何用
- 索引器和可空类型
- C#可空类型(?和??)语法
- C#可空类型(?和??)语法
- 理解null值和C#中可空类型(NullAble<T>)
- C# 可空类型和空接合运算符(??)
- C# 可空类型?和空接合操作符??
- C# 可空类型和空接合运算符(??)
- MySQL使用profile分析SQL执行状态
- C语言inline函数
- HTML中关于justify(text-align)属性无效果解决讲解
- 整数数组中找出只出现了一次的数
- angularjs中方法执行的一个小tip
- 理解null值和可空类型
- js 中offsetTop、offsetLeft、offsetWidth、offsetHeight详解
- caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor
- 设计模式--工厂模式
- 多线程-多线程方式3的思路及代码实现:方式3依赖于线程池存在的
- ubuntu16.04下apache部署两个CI网站
- 构造方法的作用
- 人工智能全球化,中国科技企业正在加速布局/智库2861
- 数据模型访问结构