2010-06-07 25 views
19

Olası Çoğalt: - Bu iseÇift nedir? C# demek?

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

NUnit projenin assert sınıfının kodu okurken
C# newbie: what’s the difference between “bool” and “bool?” ?

Merhaba, , ben bu özel yapı rastladı işlev ikinci giriş parametresi double? olarak girilir. İlginç olan, bu kodun VS2010'da (C# 4.0) sorunsuz bir şekilde derlenmesidir. Herkes bunun neden hata attığını bilmiyor mu? Neden double? geçerli bir anahtar sözcük olarak kabul edilir ve ? için özel bir önem taşır.

+1

Bkz. [C# newbie: "bool" ile "bool?" Arasındaki fark nedir? ?] (http://stackoverflow.com/questions/1181491/c-newbie-whats-the-difference-between-bool-and-bool) –

+4

Adamı indirmeyi durdurun, bu geçerli bir soru ve bunu yapan biri için zor Cevabı bulmak için null işlecini tanıyın. Soruyu tam olarak kopyalayın. – Diadistis

+2

Bu düşüşlerden ne haber? Soru işareti soneki arama motoru dostu değil. InvalidOperationException ile ilgili uyarı almak için – cfern

cevap

23

double?Nullable<double> sadece kısaltmadır; temel olarak, null olabilen bir double. Ama kod çok güvenli değil. actual, null ise, (double)actual bir istisna atar.

+1

+1. – Steven

7

NULL bir türdür. Yani bu da boş olabilir bir çift var.

Daha fazla bilgi için bkz. here.

3

Bu, parametrenin de null olarak adlandırılabileceği anlamına gelir.

2

Sözdizimi T? System.Nullable için kısa yoldur. Aşağıdaki kod satırı null türünü bildirir.

double? actual =null;

Sen boş değer atamak için ilave edilir olabilen türün kavram vardır .NET 2.0 böylece int ve double gibi C# ilkel türleri de dahil NET değer türleri (struct'lar) için boş değerler atayamazsınız. örneğin

:

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