A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蛋壳 中级黑马   /  2014-1-8 13:50  /  1522 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

可空null类型的具体用法有哪些呢?

8 个回复

正序浏览
为什么值类型的变量不能使null?
简单地说,对于值类型,我们希望它拥有一套和真正的值一样的完整的位模式(bit pattern),而对于引用类型,则希望丢失一个潜在的值,用它换取能使用一个null值的便利。
可以为 null 的类型可以表示基础类型的所有值,另外还可以表示 null 值。可以为 null 的类型可通过下面两种方式中的一种声明:
System.Nullable<T> variable
- 或 -
T? variable
T 是可以为 null 的类型的基础类型。T 可以是包括 struct 在内的任何值类型;但不能是引用类型。
有关可能使用可以为 null 的类型的示例,请考虑普通的布尔变量如何能够具有两个值:true 和 false。不存在表示“未定义”的值。在很多编程应用中(最突出的是数据库交互),变量可以以未定义的状态出现。例如,数据库中的某个字段可能包含值 true 或 false,但是它也可能根本不包含值。同样,可以将引用类型设置为 null,以指示它们未初始化。
int? op1 = 5;
int result = (int) op1 * 2;        //将可空类型转换为值类型必须进行显式转换
或者
int result = op1.Value * 2;          //通过可空类型的Value属性获取存储的值

?? 运算符 调用 null 合并运算符(null coalescing operator)和用于定义可以为 null 的值类型的默认值或引用类型。如果操作数不为空,则返回该左操作数;否则它返回正确的操作数。
以下两个表达式是等价的
op1 ?? op2
op1 == null ? op2 : op1


Nullable<T>是一个结构——一个值类型!这意味着如果把它转换成引用类型,就需要对它进行装箱。
            Nullable<int> nullable = 5;
            object boxed = nullable;        //装箱“有一个值的可空类型的实例”
            Console.WriteLine(boxed.GetType());
            int normal = (int)boxed;        //拆箱成非可空变量
            Console.WriteLine(normal);

            nullable = (Nullable<int>)boxed;
            Console.WriteLine(nullable);

            nullable = new Nullable<int>();
            boxed = nullable;                //装箱“一个没有值的可空类型的实例”
            Console.WriteLine(boxed == null);

            nullable = (Nullable<int>)boxed;                //拆箱成可空变量
            Console.WriteLine(nullable.HasValue);
            Console.ReadKey();

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

回复 使用道具 举报
为什么不加技术分~  {:soso_e141:}

评分

参与人数 1技术分 +1 收起 理由
电脑大牛 + 1

查看全部评分

回复 使用道具 举报
只是飘过,看看
回复 使用道具 举报
.NET中的null 代表一个引用类型的变量不引用任何的对象,但在某场合,值类型的变量也可能是“空”的。
常使用比如数据库里,字段经常会出现NULL值,数据库中NULL值含义:此字段未赋值,其值不定
如:int? nullableInt=null;  T?是System.Nullable<T>的简写
1.
Class MyDataClass
{
       public int? IntProperty{get;set;}
}
DataTable dt=....  //从数据库中提取数据,填充到DateTable中
DataRow dr=dt.Rows[0];
MyDataClass dataObject=new MyDataClass(); //创建数据对象
dataObject.IntProperty=dr["intColumn"] as int?;

2.
op==null? 0 : op
C#提供一种简写的写法:op??0

评分

参与人数 1技术分 +2 收起 理由
电脑大牛 + 2

查看全部评分

回复 使用道具 举报
1、C#不允许把 null 赋给一个值类型的数据。而引用类型可以是null。
但是,利用 C# 定义的一个修饰符,可将一个变量声明为一个可空(nullable)值类型。int? num = null;
当把一个变量定义为可空值类型时,该变量依然可以被赋值为 0。
int? a = null;  
Console.WriteLine("a = {0}", a);  
a = 0;  
Console.WriteLine("a = {0}", a);  
2、在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。
回复 使用道具 举报
1.值类型后加问号表示此类型为可空类型,如int? i = null;
2.可空类型与一元或二元运算符一起使用时,只要有一个操作数为null,结果都为null;
3.比较可空类型时,只要一个操作数为null,比较结果就为false。

评分

参与人数 1技术分 +2 收起 理由
陈福军 + 2

查看全部评分

回复 使用道具 举报
可空类型主要是用在对于数据库字段操作的时候,因为有时候数据库的字段可以为空,这时我们在编码的时候就需要用到可空类型了,只需要加上一个?号就可以将平时的类型变成可空数据类型

评分

参与人数 1技术分 +1 收起 理由
陈福军 + 1

查看全部评分

回复 使用道具 举报
这个问题够模糊的,你还是表达清楚一点吧,毕竟可空的类型不占少数!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马