2010-06-07 59 views
19

可能重複:
C# newbie: what’s the difference between 「bool」 and 「bool?」 ?什麼是雙重?在C#中是什麼意思?

嗨, 在閱讀NUnit的項目的斷言類的代碼,我碰到這種特殊的結構來 -

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

在這功能第二個輸入參數輸入爲double?。 有趣的是,這個代碼在VS2010(C#4.0)中編譯沒有問題。 任何人都知道爲什麼這不會引發錯誤?爲什麼double?被認爲是有效的關鍵字,對?有什麼特別的意義。

+1

請參閱[C#newbie:「bool」和「bool?」之間的區別是什麼? ?](http://stackoverflow.com/questions/1181491/c-newbie-whats-the-difference-between-bool-and-bool) – 2010-06-07 10:04:03

+4

停止downvoting的傢伙,這是一個有效的問題,這是很難的人誰doesn不知道可空的操作員找到答案。只需將問題視爲完全重複即可。 – Diadistis 2010-06-07 10:07:20

+2

這些降價是怎麼回事?問號後綴不是很搜索引擎友好。 – cfern 2010-06-07 10:07:54

回答

23

double?只供Nullable<double>速記;基本上,double可以是null。但代碼不是很安全。如果actualnull(double)actual將引發異常。

+1

+1,用於警告有關'InvalidOperationException'的警告。 – Steven 2010-06-07 10:13:02

7

它是可以空的類型。所以它是一個雙精度值,也可以爲null。

有關更多信息,請參見here

3

我相信這意味着該參數也可以被稱爲空。

2

語法T?是System.Nullable的簡寫。 以下代碼行聲明瞭可爲空的類型。

double? actual =null;

不能分配到.NET值類型(結構)包括C#基本類型如int和雙空值,從而在.NET 2.0有被添加到分配空值空類型的概念。

例如:

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