2010-06-07 16 views
19

Duplicar posible:
C# newbie: what’s the difference between “bool” and “bool?” ?¿Qué es el doble? significa en C#?

Hola, Mientras lee el código de la clase aserción del proyecto NUnit, me encontré con este particular construcción -

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

En este función el segundo parámetro de entrada se ingresa como double?. Lo interesante es que este código se compila sin problemas en VS2010 (C# 4.0). ¿Alguien sabe por qué esto NO está arrojando un error? ¿Por qué se considera double? una palabra clave válida y existe algún significado especial para el ??

+1

Ver [C novato: ¿cuál es la diferencia entre "bool" y "bool?" ?] (http://stackoverflow.com/questions/1181491/c-newbie-whats-the-difference-between-bool-and-bool) –

+4

Detener la votación negativa del tipo, es una pregunta válida y es difícil para alguien que no No conozco al operador que admite nulos para encontrar la respuesta. Solo cierra la pregunta como duplicado exacto. – Diadistis

+2

¿Qué pasa con esos downvotes? El sufijo del signo de interrogación no es muy amigable para los motores de búsqueda. – cfern

Respuesta

23

double? es sólo la abreviatura de Nullable<double>; básicamente, un double que puede ser null. Pero el código no es muy seguro. Si actual es null, (double)actual lanzará una excepción.

+1

+1 como advertencia de advertencia sobre 'InvalidOperationException'. – Steven

7

Es un tipo que admite nulo. Entonces es un doble que también puede ser nulo.

Consulte here para obtener más información.

3

Creo que esto significa que el parámetro también podría llamarse nulo.

2

La sintaxis T? es una abreviatura de System.Nullable. La siguiente línea de código declara el tipo anulable.

double? actual =null;

No se puede asignar valores nulos a los tipos de valor .NET (estructuras) incluyendo C# tipos primitivos como int y el doble de lo que en .NET 2.0 no es concepto de tipo anulable se añade a asignar un valor nulo.

por ejemplo:

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