2010-11-22 30 views
8

Une question vraiment ennuyeuse, désolé, mais je ne sais vraiment pas encore;) J'ai toujours essayé string.empty, mais avec une décimale cela produit une erreur.VB Vérifiez si int est vide

Y a-t-il une fonction? Malheureusement, pour les questions les plus simples, il n'y a pas de réponses sur Google

Répondre

15

Votre titre (et votre balise) vous demande un "int", mais votre question indique que vous obtenez une erreur avec un "décimal". De toute façon, il n'y a rien de tel que "vide" quand il s'agit d'un value type (tel qu'un Integer, Decimal, etc.). Ils ne peuvent pas être réglés sur Nothing comme vous le feriez avec un reference type (comme un String ou un cours). Au lieu de cela, les types de valeur ont un constructeur par défaut implicite qui initialise automatiquement vos variables de ce type à sa valeur par défaut. Pour les valeurs numériques telles que Integer et Decimal, la valeur est 0. Pour les autres types, voir this table.

Vous pouvez vérifier si un type de valeur a été initialisé avec le code suivant:

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 

Notez que mySecondFavoriteNumber est automatiquement initialisé à 0 (la valeur par défaut pour un Integer) dans les coulisses du compilateur, l'instruction If est True. En fait, la déclaration de mySecondFavoriteNumber ci-dessus est équivalente à la déclaration suivante:

Dim mySecondFavoriteNumber as Integer = 0 


Bien sûr, comme vous l'avez probablement remarqué, il n'y a aucun moyen de savoir si est fait 0 numéro préféré d'une personne, ou s'ils n'ont pas encore spécifié de numéro préféré. Si vous avez vraiment besoin d'un type de valeur qui peut être réglé sur Nothing, vous pouvez utiliser Nullable(Of T), déclarant la variable à la place que:

Dim mySecondFavoriteNumber as Nullable(Of Integer) 

Et vérifier s'il a été affecté comme suit:

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

Juste une remarque: en fait, vous pouvez * * attribuer Rien à un type de valeur dans VB.Net. Mais dans ce cas, Nothing ne signifie pas 'null' mais 'default (T)', donc pour les entiers, c'est la même chose que 0. – jeroenh

+0

@jeroenh: C'est correct. Notez que j'ai dit qu'ils ne peuvent pas être mis à 'Nothing' * comme vous le feriez avec un type de référence *. Si vous définissez un type de valeur sur 'Nothing', il sera initialisé à son type par défaut. Le fait est qu'il n'y a pas d'état "nul" ou "vide" pour les types de valeur; ils contiennent toujours une valeur. –

+0

Plus récemment, 'Dim mySecondFavoriteNumber as Integer?' Est identique à 'Dim mySecondFavoriteNumber as Nullable (Of Integer)' –

0

Eh bien, la valeur par défaut pour un certain nombre serait 0, mais vous pouvez aussi essayer ceci:

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

puis vérifier la longueur ou si la chaîne 's' est vide.

2

peut-être ce que vous cherchez est annulable

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