19

当我们必须在 C#.net中使用可为空的类型时?任何人都可以举例说明。

4

4 回答 4

34

可空类型(何时使用可空类型)是可以将 null 作为值的值类型。它的默认值null意味着你没有给它赋值。值类型的示例是 int、float、double、DateTime 等。这些类型具有这些默认值

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

对于 Nullable 替代方案,上述任何一项的默认值为 null

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

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

string s = null;
object o = null;

它们在处理来自数据库的值时非常有用,当从表返回的值是NULL. 想象一下您的数据库表中的一个整数值可能是 NULL,只有0在 c# 变量不可为空时才能表示 - 常规整数。

此外,想象一个EndDate列,其值直到将来的实际时间才确定。可以在数据库中将其设置为 NULL,但您需要一个可为空的类型将其存储在 C# 中

DateTime StartDate = DateTime.Today;
DateTime EndDate? = null; //we don't know yet
于 2012-11-05T18:51:45.453 回答
5

当我们必须在 C#.net 中使用可空类型?

想象有一个整数变量id代表一个特定的id.

您可以存储1,44或其他任何东西。但是如果您不知道 id 怎么办。您不能只存储-1or 0。您可能正在考虑分配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.

于 2012-11-05T18:53:34.657 回答
1

可空类型是 C#2.0 中引入的新概念,它允许用户将空值分配给 C# 语言的原始数据类型。这里重要的是 Nullable 类型是 Structure 类型。

BlogPost:Nullable 类型——为什么我们在编程语言中需要 Nullable 类型?

于 2012-11-05T18:26:21.733 回答
1

来自: http: //msdn.microsoft.com/en-us/library/1t3y8s4s (v=vs.80).aspx Nullable 类型是 System.Nullable 结构的实例。可空类型可以表示其基础值类型的正常值范围,外加一个额外的空值。例如,一个 Nullable<Int32>,发音为“Nullable of Int32”,可以分配从 -2147483648 到 2147483647 的任何值,也可以分配空值。可以为 Nullable<bool> 分配值 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);
        }
    }
}
于 2012-11-05T18:28:19.260 回答