C# 可空类型的学习

     null,这是一个空值,但是它在数据库和C#中表达的含义不一样。在数据库中,null表示的是不确定,比如null+5还是null,依旧是不确定的,在C#中,如果给一个字符串赋值null,表示这个字符串为空。另外,在数据库中,可以给Int32型赋值null,而在C#中,是不能给一个值类型赋空值的,那么如果来解决数据库和C#中,意义上的不兼容呢?这时,C#中引入了一个泛型 “可空类型”,在一般的赋值的情况下,还可以为null。

       可以以下面的方式来定义一个可空的Int32.

       int? a=null;

       这样就可以将null赋值给一个int,同时也可以将a赋予一般的整数,例如:

       int? b=20;

       需要注意下面几点:

  1. 可控类型表示可以赋值为null的值类型变量,无法创建基于引用类型的可空类型,因为引用类型已经支持了可空类型,
  2. T?是System.Nullable<T>的简写,此处的T为值类型,可以互换。
  3. 可控类型和一般的值类型赋值方法相同。例如int? x=5; double? y=0.4;
  4. 它有2个重要的属性,可以使用 HasValueValue 只读属性测试是否为空和检索值。如果此变量包含值,则HasValue属性返回True,或者此变量的值为空时,返回False。可空变量类型默认值将HasValue设置为false,未定义value.
  5. 可以使用  "??"运算符分配默认值,当前值为空的时候,将其赋予非空类型时使用默认值,例如:
    int? x=null;
    int y=x??-1;

    在x为null的前提下,可以使用??给y赋值。此外,null+一个非空依旧是null,例如:x = null;
                x = x + 5;此时x依旧是null

可以参见下面的代码:

可空类型学习
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 可空数据类型
{
class Program
{
static void Main(string[] args)
{
int? x=null;
Console.WriteLine(x.HasValue);
if (x.HasValue)
{
Console.WriteLine(
"不是空值,且值为{0}",x.Value);
}
else
{
Console.WriteLine(
"是空值");
}

x
= 20;
Console.WriteLine(x.HasValue);
if (x.HasValue)
{
Console.WriteLine(
"不是空值,且值为{0}", x.Value);
}
else
{
Console.WriteLine(
"是空值");
}

int y=(int)x;//将一个可空类型赋给一个一般的值类型时,需要显式转换,int y=x会报错。


}
}
}
posted @ 2011-08-26 23:06  langren919  阅读(871)  评论(0编辑  收藏  举报