VS2005中使用C#的新特性:可空类型
随着C#语言最新标准的发布,现在也提供了对“can 空”类型的支持。在处理包含选项的数据库记录时,这个小小的变化将非常有用。当然,在其他地方也很有用。
简单地说,空数据类型是包含已定义数据类型或值的空(null)类型。C#的ECMA-334标准提供了所有C#值类型的可用空版本的描述。
可以定义空类型。
可定义空类型和不可定义空类型基本相似,区别在于?为了展示。要定义一个整数,可以使用一个简单的语句:
int myInt = 1;
要使myInt能够存储空值,可以像这样声明它:
int?myNullableInt = 1;
如你所见,这两个变量似乎是相同的。但是空类型的版本非常不同。空的版本实际上是一个将值类型与标记值是否为空的标志位相结合的结构。可访问的空类型有两个公共可读的属性,HasValue和Value。如果存储了一个值,布尔变量HasValue为true。否则,如果变量为空,则值为false。如果HasValue为true,就可以得到这个变量的值。可以空的变量有两种有效的赋值,如下所示:
双倍?myDouble = 3.1415926
double?myOtherDouble = null
可以看到,myDouble是赋值的,但也可以赋值为空。在第二个语句中,myOtherDouble用空值初始化,这在非空类型中无法完成。
可用空类型
Can 空类型可以像普通值类型一样使用。其实你可以用内置的隐式转换来转换可以空的同类型变量和可以空的非变量。这意味着您可以在标准整数和可变空整数之间进行转换:
int?nFirst = null
int Second = 2;
nFirst = Second//valid
n first = 123;//valid
Second = n first;//同等有效
nFirst = null//valid
Second = n first;//异常,后者是非空类型
在上面的语句中可以看到,如果变量can 空不包含空的值,那么它可以与非变量空交换值。如果是空值,那么就会抛出异常。为了防止异常,可以使用变量空的HasValue属性:
if (nFirst。has value)Second = n first;
可以看到,如果nFirst有赋值,就会发生,否则程序会跳过这条语句。
您可以使用空类型的运算符
虽然可以使用可以空和非can 空的相同值类型的变量的转换,但是必须对运算符进行一些更改,以便它们可以处理can 空和非can 空的值。这些运算符称为提升运算符。
考虑以下代码:
int ValA = 10
int?ValB = 3;
int?ValC = ValA * ValB
ValC中存储了什么?30存储在ValC C中,扩展了标准运算符,使其可以处理可以空的类型。考虑以下变化:
int ValA = 10
int?ValB = null
int?ValC = ValA * ValB
这次ValC值多少?ValC是空。无论哪个操作数是空,提升后的运算符的结果都是空。即使进行加减运算,结果也是空。
如果ValC不是空类型怎么办?以下代码的结果会是什么?
int ValA = 10
int?ValB = null
int ValC = ValA * ValB// ValC不属于空类型
代码将抛出一个异常。ValA*ValB的结果是空,但是不能赋给不允许的空类型,这样会导致程序的异常抛出。
位律师回复
0条评论