2010-11-22 18 views
8

Una domanda davvero noiosa, mi dispiace, ma non lo so ancora davvero;) Ho provato sempre string.empty, ma con un decimale questo produce un errore.VB Controlla se int è vuoto

Esiste qualche funzione? Purtroppo, per le domande più semplici, non ci sono risposte su google

risposta

15

Il tuo titolo (e tag) chiede un "int", ma la tua domanda dice che stai ricevendo un errore con un "decimale". In entrambi i casi, non esiste nulla di "vuoto" quando si tratta di un value type (come ad esempio Integer, Decimal, ecc.). Non possono essere impostati su Nothing come si può con un reference type (come un String o classe). Invece, i tipi di valore dispongono di un costruttore implicito predefinito che inizializza automaticamente le variabili di quel tipo sul valore predefinito. Per valori numerici come Integer e Decimal, questo è 0. Per altri tipi, vedere this table.

in modo da poter verificare se un tipo di valore è stato inizializzato con il seguente codice:

Dim myFavoriteNumber as Integer = 24 
If myFavoriteNumber = 0 Then 
    ''#This code will obviously never run, because the value was set to 24 
End If 

Dim mySecondFavoriteNumber as Integer 
If mySecondFavoriteNumber = 0 Then 
    MessageBox.Show("You haven't specified a second favorite number!") 
End If 

noti che mySecondFavoriteNumber viene inizializzato automaticamente a 0 (il valore predefinito per un Integer) dietro le quinte da parte del compilatore, quindi l'istruzione If è True. In realtà, la dichiarazione di mySecondFavoriteNumber sopra è equivalente alla seguente dichiarazione:

Dim mySecondFavoriteNumber as Integer = 0 


Naturalmente, come avrete probabilmente notato, non c'è modo di sapere se il numero preferito di una persona è realtà 0, o se non hanno ancora specificato un numero preferito. Se veramente bisogno di un tipo di valore che può essere impostato per Nothing, è possibile utilizzare Nullable(Of T), dichiarando la variabile invece come:

Dim mySecondFavoriteNumber as Nullable(Of Integer) 

E il controllo per vedere se è stato assegnato come segue:

If mySecondFavoriteNumber.HasValue Then 
    ''#A value has been specified, so display it in a message box 
    MessageBox.Show("Your favorite number is: " & mySecondFavoriteNumber.Value) 
Else 
    ''#No value has been specified, so the Value property is empty 
    MessageBox.Show("You haven't specified a second favorite number!") 
End If 
+0

Solo una nota a margine: in realtà si può * * assegnare Niente da un tipo di valore in VB.Net. Ma in questo caso, Nothing non significa "null" ma "default (T)", quindi per numeri interi è uguale a 0. – jeroenh

+0

@jeroenh: è corretto. Si noti che ho detto che non possono essere impostati su 'Nothing' * come si potrebbe con un tipo di riferimento *. Impostando un tipo di valore su 'Nothing', verrà ripristinato il suo tipo predefinito. Il punto è che non esiste uno stato "nullo" o "vuoto" per i tipi di valore; contengono sempre un valore. –

+0

Nota più recentemente, 'Dim mySecondFavoriteNumber as Integer?' È lo stesso di 'Dim mySecondFavoriteNumber as Nullable (Of Integer)' –

0

Ebbene, il valore predefinito per un numero sarebbe 0, ma si può anche provare questo:

int x = 123; 
String s = "" + x; 

e quindi controllare la lunghezza o se la stringa 's' è vuota.

2

Forse quello che stai cercando è Nullable

Dim foo As Nullable(Of Integer) = 1 
    Dim bar As Nullable(Of Decimal) = 2 

    If foo = 1 Then 
     If bar = 2 Then 
      foo = Nothing 
      bar = Nothing 
      If foo Is Nothing AndAlso bar Is Nothing Then Stop 
     End If 
    End If