可能重复:
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?
被视为有效关键字,?
。
答案 0 :(得分:25)
double?
只是Nullable<double>
的简写;基本上,double
可以是null
。但代码不是很安全。如果actual
为null
,(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");
}