2012-01-03 8 views
5

Pregunta directa: Tengo algunas variables que son dobles. Me gustaría poder almacenar un estado "nulo" en ellos, es decir, necesito poder representar que la variable no contiene datos válidos. Preferiría no asociar una variable booleana "es válida" con cada doble, sería feo y probablemente innecesario.¿Cómo uso un valor nulo en un doble en VB.Net 2010?

En primer lugar, me enteré de que uno tiene que declarar la variable diferente para permitir que el concepto de 'IsNothing' a ser comprobado, así que hacer esto:

dim someDouble as Double? 

(Tenga en cuenta el signo de interrogación). Si no lo declaro así, la comprobación de errores me da un mensaje de "IsNot requiere operandos que tienen tipos de referencia".

Una vez declarado, estableciendo la variable a ...

someDouble = Nothing 

... parece que ponerlo en cero, debido a que nunca se ejecuta el código en mi sentencia if/else que comprueba si someDouble IsNot Nothing. ... lo cual es malo porque la variable puede legítimamente almacenar un 0 como un dato válido.

¿Qué me falta aquí? ¡Gracias!

EDITAR: Olvidé que estaba usando propiedades en una clase de Get y Set estos valores. Resulta que estaba haciendo las cosas bien, excepto que dejé el tipo de Property como Double en lugar de Double?, por lo que volvía a cero en lugar del valor Nothing. ¡Sin embargo, aún hay información útil en las respuestas a continuación!

Respuesta

7

usted debe ir a leer en Nullable Structure en MSDN

esto explicará cómo usarlo

ejemplo:

Sub Main() 
    Dim someDouble As Double? 

    someDouble = Nothing 
    If someDouble.HasValue Then 
     Console.WriteLine(someDouble.ToString) 
    Else 
     Console.WriteLine("someDouble is nothing/null") 
    End If 
    Console.Read() 
End Sub 
+0

@BalaR, sí, es – Fredou

+0

Aha, esto es esencialmente lo que ya estaba haciendo ... excepto que me equivoqué y olvidé cambiar mi * Propiedad * para escribir '¿Doble?' desde 'Doble' por lo que estaba volviendo a un 'Doble' estándar al hacer 'Establecer'. Argh! Gracias por el enlace! – evilspoons

4

Aunque no sé qué está causando sus problemas con "nada" , también podría usar "Double.NaN" (No es un número) en su lugar. Esto tampoco requeriría el especial "¿Doble?" declaración.

+0

¡Excelente idea! Creo que intentaré esto en lugar del enfoque Nada (nulo). Sin embargo, vea mi comentario sobre la respuesta de Fredou sobre por qué no funcionaba con Nada. – evilspoons

Cuestiones relacionadas