什么是c#中的可空类型?

时间:2012-11-05 18:24:52

标签: c#

当我们必须在C#.net中使用可空类型时?任何人都可以用例子解释。

5 个答案:

答案 0 :(得分:34)

可空类型(When to use nullable types)是可以将null作为值的值类型。它的默认值为null,这意味着您没有为其赋值。值类型的示例是int,float,double,DateTime等。这些类型具有这些默认值

int x = 0;
DateTime d = DateTime.MinValue;
float y = 0;

对于Nullable替代方案,上述任何一项的defualt都为null

int? x = null; //no value
DateTime? d = null; //no value

这使它们的行为类似于引用类型,例如对象,字符串

string s = null;
object o = null;

当从表中返回的值为NULL时,它们在处理数据库中的值时非常有用。想象一下,数据库表中的整数值可能为NULL,如果c#变量不可为空,则只能用0表示 - 常量整数。

另外,想象一下EndDate列,其值在未来的实际时间之前不会确定。可以在DB中将其设置为NULL,但是您需要一个可以为空的类型来存储它在C#

DateTime StartDate = DateTime.Today;
DateTime EndDate? = null; //we don't know yet

答案 1 :(得分:4)

  

当我们必须在C#.net?

中使用可空类型时

想象一下,整数变量id代表一个特定的id

您可以存储144或其他任何内容。但如果您不知道该ID,则该怎么办。您只能存储-10。可能会考虑分配null,但通常null无法分配给值类型。

int id=null;//error

Nullable type可以让您这样做。


int,double,char.. 等值类型不能表示为NULL值。

要在值类型中表示null,您必须使用nullable type ..

它表示为值类型,后跟?

int? id=null;

被转换为

Nullable<int> id=new Nullable<int>();

可空类型的默认值为null

答案 2 :(得分:1)

Nullable类型是C#2.0中引入的新概念,它允许用户为C#语言的原始数据类型赋予空值。这里不重要的是Nullable类型是结构类型。

BlogPost:Nullable type -- Why we need Nullable types in programming language ?

答案 3 :(得分:1)

来自:http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx 可空类型是System.Nullable结构的实例。可空类型可以表示其基础值类型的正常值范围,以及额外的空值。例如,可以为发音为“Nullable of Int32”的Nullable&lt; Int32&gt;分配从-2147483648到2147483647的任何值,或者可以为其赋予空值。 Nullable&lt; bool&gt;可以赋值true或false,或null

class NullableExample
{
    static void Main()
    {
        int? num = null;
        if (num.HasValue == true)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        //y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

答案 4 :(得分:0)

在应用程序中假设您需要捕获客户的出生日期,这不是必填字段。您可以在Customer类中将DateOfBirth属性声明为System.DateTime类型。由于DateTime是值类型,因此它不能接受空值,因此它将具有一些默认值。

因此,当客户未在出生日期控制中填写显式值时,您需要先将逻辑保存到DB中,然后将默认值视为NULL。在DB中,您可以将NULL保存到DateTime字段。

为避免这些不必要的步骤来解释UI和DA层中的值,您可以在C#中使用Nullable类型,这将使​​代码更具可读性。

要阅读有关可空类型的更多信息,请参阅Nullable types in C# with an example