理解null值和C#中可空类型(NullAble<T>)
2013-07-26 12:22
316 查看
在C#中有一个关键字是null,它表示不引用任何对象的空引用的文字值,也就是当一个引用类型的变量被赋予null值时,该变量是空引用,没有在堆上分配空间,null是引用类型变量的默认值。从定义上看,只有引用类型变量才可以赋予null值。
可以定义一个类,即可空类型,就是指可以赋值为null的类型。可空类型是System.Nullable<T>结构的实例。若是可空类型,则既可以表示其基础值类型正常范围内的值,同时又可以表示空值null。
定义null的类型有两种方式(以下的T代表的是数据类型,而a代表变量名):
1)Nullable<T>
2)T?a
例如申明一个可空类型:
1)第一种申明方式
2)第二种申明方式
可以为null类型的都是具有两个公共只读属性:
1)HasValue属于bool型,当变量包含非null值时,它被设置为true;
2)Value,Value与基础类型相同,如果HasValue为true时,则说明Value包含有意义的值。
此外如果基础类型的值为null时,则使用System.Nullable.GetValueOrDefault属性返回该基础类型所赋的值或默认值,例如int y =num.GetValueOrDefault();
可以定义一个类,即可空类型,就是指可以赋值为null的类型。可空类型是System.Nullable<T>结构的实例。若是可空类型,则既可以表示其基础值类型正常范围内的值,同时又可以表示空值null。
定义null的类型有两种方式(以下的T代表的是数据类型,而a代表变量名):
1)Nullable<T>
2)T?a
例如申明一个可空类型:
1)第一种申明方式
Nullable<Int32> i=null; //申明一个变量名为i的可空类型,其基础类型为Int32的值类型 Nullable<Int32>i=32; //因为其基础类型T为Int32,因此可以赋值为32
2)第二种申明方式
int?a=null; //申明一个变量名为a的可空类型,其基础类型为int的值类型 int?a=3;
可以为null类型的都是具有两个公共只读属性:
1)HasValue属于bool型,当变量包含非null值时,它被设置为true;
2)Value,Value与基础类型相同,如果HasValue为true时,则说明Value包含有意义的值。
此外如果基础类型的值为null时,则使用System.Nullable.GetValueOrDefault属性返回该基础类型所赋的值或默认值,例如int y =num.GetValueOrDefault();
static void Main(string[] args) { Nullable<Int32> num = null;//申明一个名为num的可空类型,基础类型为Int32 if (num.HasValue == true)//如果HasValue为true时表明其num包含非null值 Console.WriteLine(num.Value); else //此时说明num包含null值 Console.WriteLine("num=null"); int y = num.GetValueOrDefault();//将num默认值赋给y,int类型的默认值是0 try //如果num.value为空时则抛出异常 { y = num.Value;//将num的值赋给value,此时y必须具有一个非空的值 } //因为y为int型,而int型并不是可空类型 catch (Exception e) { Console.WriteLine(e.Message);//捕获异常,并显示错误信息 } Console.ReadKey(); }
相关文章推荐
- 深入理解 c# 第五章 匿名方法用于Action<T>委托类型 反转字符 求平方根 求平均数
- 【基础语言学习】C#中的可空类型运算(Nullable<T>)------T?
- C#Nullable<T>可空的值类型,C#中的?使用整理
- 深入理解 c# 第四章 使用Nullable<T>的各个成员
- 理解C#值类型与引用类型 <转载>
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- System.Nullable<T> int? 数据库中的int类型可以为空 在C# 中 的处理
- 【C#】 6.Set<T>数据类型
- 读<<CLR via C#>>总结(5) 如何合理使用类型的可见性和成员的可访问性来定义类
- 《Effective C#》读书笔记——条目23:理解接口方法和虚方法的区别<使用C#表达设计>
- 【More Effective C#】掩藏在Nullable<T>后的秘密
- c# action<> func<> 这2个委托怎么用和理解
- 深入理解 c# 第一章 使用lambda表达式 对 List <Product> 进行排序
- 提问c# action<> func<> 这2个委托怎么用和理解
- 可为空的值类型(Nullable<T>)需要注意的地方
- C#定义泛型方法错误-类型“T”必须是引用类型才能用作泛型类型或方法“System.Data.Linq.Table<TEntity>”中的参数“TEntity”
- 深入理解 c# 第一章 使用IComparer<Product> 对 List<Product> 进行排序
- C#类型的转换:Converter<TInput, TOutput> 委托的使用
- 【转】四、可空类型Nullable<T>到底是什么鬼
- 理解vector<T>::size_type类型