2010-06-07 6 views
19

Possible en double:
C# newbie: what’s the difference between “bool” and “bool?” ?Qu'est-ce que le double? signifie en C#?

Salut, Pendant la lecture du code de la classe assert de projet NUnit, je suis tombé sur cette construction particulière -

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

Dans ce fonction le deuxième paramètre d'entrée est entré comme double?. La chose intéressante est que ce code compile sans problème dans VS2010 (C# 4.0). Quelqu'un sait pourquoi cela ne génère PAS d'erreur? Pourquoi double? est-il considéré comme un mot-clé valide et y at-il une signification particulière pour le ??

+1

Voir [C# newbie: quelle est la différence entre "bool" et "bool?" ?] (http://stackoverflow.com/questions/1181491/c-newbie-whats-the-difference-between-bool-and-bool) –

+4

Arrêtez de descendre le gars, c'est une question valable et c'est difficile pour quelqu'un qui ne le fait pas Je ne connais pas l'opérateur nullable pour trouver la réponse. Fermez la question en tant que doublon exact. – Diadistis

+2

Quoi de neuf avec ces downvotes? Le suffixe de point d'interrogation n'est pas très convivial pour les moteurs de recherche. – cfern

Répondre

23

double? est juste un raccourci pour Nullable<double>; Fondamentalement, un double qui peut être null. Mais le code n'est pas très sûr. Si actual est null, (double)actual lèvera une exception.

+1

+1 pour l'avertissement d'avertissement sur '' InvalidOperationException'. – Steven

7

Il s'agit d'un type Nullable. Donc c'est un double qui peut aussi être nul. Pour plus d'informations, voir here.

3

Je crois que cela signifie que le paramètre pourrait aussi être appelé null.

2

La syntaxe T? est un raccourci pour System.Nullable. La ligne de code suivante déclare un type Nullable.

double? actual =null;

Vous ne pouvez pas affecter des valeurs nulles à des types de valeur .NET (de structs), y compris C# types primitifs comme int et double ainsi dans .NET 2.0, il est un concept de type Nullable est ajouté à attribuer une valeur nulle.

par exemple:

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