2010-06-07 18 views
19

Eventuali duplicati:
C# newbie: what’s the difference between “bool” and “bool?” ?Cosa fa il doppio? significa in C#?

Ciao, Durante la lettura del codice della classe di affermare del progetto NUnit, mi sono imbattuto in questo particolare costrutto -

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

In questo funzione il secondo parametro di input viene immesso come double?. La cosa interessante è che questo codice viene compilato senza problemi in VS2010 (C# 4.0). Qualcuno sa perché questo NON sta generando un errore? Perché lo double? è considerato una parola chiave valida e ha un significato speciale per lo ?.

+1

Vedere [C# newbie: qual è la differenza tra "bool" e "bool?" ?] (http://stackoverflow.com/questions/1181491/c-newbie-whats-the-difference-between-bool-and-bool) –

+4

Stop downvoting del ragazzo, è una domanda valida ed è difficile per qualcuno che non Conosco l'operatore annullabile per trovare la risposta. Basta chiudere la domanda come duplicato esatto. – Diadistis

+2

Che succede con quei downvotes? Il suffisso del punto interrogativo non è molto adatto ai motori di ricerca. – cfern

risposta

23

double? è solo una scorciatoia per Nullable<double>; in pratica, un double che può essere null. Ma il codice non è molto sicuro. Se actual è null, (double)actual genererà un'eccezione.

+1

+1 per avvisi di avviso su "InvalidOperationException". – Steven

7

È un tipo nullable. Quindi è un doppio che può anche essere nullo.

Vedere here per ulteriori informazioni.

3

Credo che questo significhi che il parametro potrebbe anche essere chiamato null.

2

La sintassi T? è una scorciatoia per System.Nullable. La seguente riga di codice dichiara il tipo nullable.

double? actual =null;

Non è possibile assegnare valori null per i tipi di valore .NET (struct) tra cui C# tipi primitivi come int e doppia, quindi in .NET 2.0 v'è il concetto di tipo nullable viene aggiunto per assegnare valore nullo.

ad esempio:

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