双重的是什么?在C#中意味着什么?

时间:2010-06-07 10:00:35

标签: c#

  

可能重复:
  C# newbie: what’s the difference between “bool” and “bool?” ?

您好,   在阅读NUnit项目的断言类的代码时,我遇到了这个特定的构造 -

public static void AreEqual(double expected, double? actual, double delta)
{
     AssertDoublesAreEqual(expected, (double)actual, delta ,null, null);
}

在此函数中,第二个输入参数输入为double?。 有趣的是,这段代码在VS2010(C#4.0)中编译没有问题。 任何人都知道为什么这不会引发错误?为什么double?被视为有效关键字,?

有任何特殊意义

4 个答案:

答案 0 :(得分:25)

double?只是Nullable<double>的简写;基本上,double可以是null。但代码不是很安全。如果actualnull(double)actual将引发异常。

答案 1 :(得分:7)

这是一个可以为空的类型。所以这是一个双倍也可以为空。

有关详细信息,请参阅here

答案 2 :(得分:3)

我相信这意味着该参数也可以称为null。

答案 3 :(得分:3)

语法T?是System.Nullable的简写。 下面的代码行声明了可空类型。

double? actual =null;

您不能将空值分配给.NET值类型(结构),包括c#基本类型,如int和double,因此在.NET 2.0中添加了可空类型的概念来分配空值。

例如:

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