C#难点逐个击破(8):可空类型System.Nullable_C#教程

null与void

null值用来表示数据类型未被赋予任何值,它是一种引用类型;void表示没有类型,或者说是没有任何值。null与void的区别可以认为void是根本没有,而null是一个空箱子,里面什么都没有。

null值只能赋值给引用类型,这里注意到string也是一种引用类型;引用类型在C中称为“指针”,即存放变量位置的内存空间位置。将变量设为null,会显式地设置引用,且它本身不指向任何内存位置;

null值赋给值类型将导致编译错误。

void用于方法值的返回,其本质并不是一个数据类型,它只是用于指出没有数据类型。

System.Nullable

C#中null值不能赋值给值类型,这里的值类型包括struct在内。原因是值类型不能包含引用,null作为一种“无”的引用当然不能被值类型所引用。在实际应用中这样会造成一些问题,假如现在一个数据int类型确实无法确定它的取值。这里就需要使用可空类型。

复制代码 代码如下:

System.Nullable<int> i = null;
Console.WriteLine(i);

此时即可将int类型的i声明为null类型,同时该程序运行结果将看到无任何数据显示

复制代码 代码如下:

System.Nullable<int> i = null;
Console.WriteLine(i);

此时即可将int类型的i声明为null类型,同时该程序运行结果将看到无任何数据显示

使用GetType()查看其类型将抛出System.NullReferenceException异常

复制代码 代码如下:

System.Nullable<int> i = null;
Console.WriteLine( i.GetType());


System.Nullable<T>可简写为T?,如System.Nullable<int>可写作int?。可空类型在ADO.NET编程中大量使用。

另外Nullable类型的实例均拥有HasValue成员与Value成员,其中HasValue为bool类型,表示判断该实例是否有值;Value表示在HasValue有值时实例的取值,在HasVaue为false时使用Value将触发System.InvalidOperationException异常。

复制代码 代码如下:

int? i = null;
Console.WriteLine(i.HasValue);
Console.WriteLine(i.Value);

时间: 2024-10-25 16:35:05

C#难点逐个击破(8):可空类型System.Nullable_C#教程的相关文章

C#难点逐个击破(4):main函数_C#教程

还记得读大学时初识计算机编程时的C语言,Main(){},那时还不明白入口函数是什么意思,只知道照抄书本上的示例,一行一行地跑printf看. 在C#中Main()属于主入口函数,我们知识C.C#属于编译语言,可以想象为一段程序最开始的头部部分,由Main()函数进入逐语句进行编译后执行.假如html页面也称作编程语言的话,那么它就属于从上到下一句一句(下载)执行:js也是由上到下执行,不过js相当诡异,变量作用域要特别对待:在asp.net中一般情况下是以Page_Load(object se

C#难点逐个击破(1):ref参数传递_C#教程

一般情况,方法的参数传递是通过值进行传递的,即一个对象作为参数传递给方法使用,该对象便进驻到该参数对象所在指针的内存空间(使用C来描述),也就是该对象在此位置创建了副本,当方法运行结束时,该副本将会被销毁:这种传递方式的使用占据了日常方法传参的绝大多数. 另一种情况是引用传递,它与值传递方式不同,对象传递给方法时对方法参数并没有影响,仍然返回的是受原始参数取值影响的方法,即MethodInstance(ref _refValue)调用 Method(ref _arg)方法,但_refValue对

C#难点逐个击破(7):checked与unchecked_C#教程

C#默认情况下,若常数表达式的值超过了目标类型的最大值,将会导致编译错误. 若目标数据类型不能容纳非常数表达式的数据,那么数据在赋值时会被截断. 复制代码 代码如下: class Program { static void Main(string[] args) { int n = int.MaxValue;//n=2147483647 n = n + 1; System.Console.WriteLine(n); } } 此时可用内存存储数据来解释,之前int.MaxValue在内存为为32位

C#难点逐个击破(5):类的访问类型_C#教程

讲这四类之间的区别时有必要讲解一个概念:程序集.程序集(Assembly),可以简单理解为编译之后生成的.dll或.exe文件,相对于namespace是类库的逻辑组织形式,它可以称为程序类库的物理组织形式,msdn上描述"程序集包含描述它们自己的内部版本号和它们包含的所有数据和对象类型的详细信息的元数据".一般情况是一个程序集可以包含一个或者多个命名空间. Public:对其他任何类的任何方法都是可见的: Private:本类中定义的成员只有本类的方法才能访问; Protected:

C#难点逐个击破(3):params数组参数_C#教程

在方法声明中只允许一个paras关键字,并且该关键字只能为最后一个. 复制代码 代码如下: using System; /****************************** * Chapter:C#难点逐个击破(三) * Author:王洪剑 * Date:2010-1-16 * Blog:http://www.51obj.cn/ * Email:walkingp@126.com * Description:数组参数params的使用 * ***********************

C#难点逐个击破(9):类型转换_C#教程

显式转换与隐式转换 类型之间的转换可以分为隐式转换与显式转换,如int类型可直接转换为long类型. 复制代码 代码如下: /*隐式转换*/ int intNum = 23; long longNum1 = intNum; 也可进行显式转换: 复制代码 代码如下: /*显式转换*/ int intNum = 23; long longNum2 = (long)intNum; Parse 每个值类型都包含Parse()依法,它将字符串转换成对应的数值类型] 复制代码 代码如下: /*Parse转换

C#难点逐个击破(6):C#数据类型与.net framework数据类型_C#教程

其中有<Java程序设计教程>是一个美籍华人的作品,还有Nicholas C.Zakes的<Javascript高级程序设计>,还有就是这本Illustrator C# 2008,中文译为"插图详解C#2008",实际上插图不是很多.这是我第一次完整的读原版书,感慨良深.一是我的英文居然还可以,想当初考六级还差了20多分,–!!二是老外写书真的是用心在写,对待自己的书就像对待自己的孩子一样. 以上是闲话,之前一直很想知道.net framework数据存储类型在

VS2005中使用C#的新特性:可空类型

随着C#语言最新标准的出炉,现在它也提供了对可空类型的支持.这个小变化将会在处理那些包括可选项的数据库记录时非常有用.当然在其他地方,它也是非常有用的. 简单说来,可空数据类型就是包含了所定义的数据类型或者值的空(null)的类型.C#的ECMA-334标准提供了对所有C#值类型的可空版本的描述. 定义可空类型 定义可空类型和非可空类型基本类似,不同的是采用了?来表示.如定义一个整型,你可以使用简单的语句: int myInt = 1; 为了使得myInt能够存储一个空值,你可以这样声明它: i

C#基础语法:可空类型详解

  这篇文章主要介绍了C#基础语法:可空类型详解,本文分析了可空类型的源码.研究了可空类型强制转换为常规类型.可空类型的运算等内容,需要的朋友可以参考下 以下是System.Nullable在FCL中的定义. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51