2012-01-03 11 views
5

Domanda semplice: ho alcune variabili doppie. Mi piacerebbe essere in grado di memorizzare uno stato "nullo" in essi, cioè ho bisogno di essere in grado di rappresentare che la variabile non contiene dati validi. Preferirei non associare una variabile booleana "valida" ad ogni singolo doppio, sarebbe brutto e probabilmente non necessario.Come si usa un valore nullo in un doppio in VB.Net 2010?

In primo luogo, ho scoperto che si deve dichiarare la variabile in modo diverso per permettere il concetto di 'IsNothing' da controllare, in modo da fare questo:

dim someDouble as Double? 

(Si noti il ​​punto interrogativo). Se non lo dichiaro in quel modo, il controllo degli errori mi dà un messaggio "IsNot richiede operandi che hanno tipi di riferimento".

Una volta dichiarata, impostando la variabile al ...

someDouble = Nothing 

... sembra di impostare a a zero, perché non è mai eseguito il codice nel mio if/else che controlla se someDouble IsNot Nothing. .. che è male perché la variabile può legittimamente memorizzare uno 0 come una parte di dati valida.

Cosa mi manca qui? Grazie!

MODIFICA: ho omesso che stavo usando le proprietà in una classe a Get e Set questi valori. Si scopre che stavo facendo le cose bene, tranne che ho lasciato il mio tipo Property come Double invece di un Double? in modo che tornasse a zero al posto del valore Nothing. Informazioni utili ancora nelle risposte qui sotto, però!

risposta

7

si dovrebbe andare a leggere su Nullable Structure su MSDN

questo spiegherà come usarlo

esempio:

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ì è – Fredou

+0

Aha, questo è essenzialmente quello che stavo già facendo ... tranne che mi sono scocciato e ho dimenticato di cambiare la mia proprietà * * per digitare 'Double?' da "Double" quindi è stato restituito a un "Double" standard quando si esegue il "Set". Argh! Grazie per il link! – evilspoons

4

Mentre io non so che cosa sta causando i problemi con "Niente" , potresti anche usare "Double.NaN" (Not a Number). Questo non richiederebbe nemmeno lo speciale "Double?" dichiarazione.

+0

Ottima idea! Penso che proverò questo invece dell'approccio Nothing (null). Vedi il mio commento sulla risposta di Fredou per il motivo per cui non stava lavorando con Nothing, comunque. – evilspoons