2010-11-22 28 views
8

Una pregunta realmente aburrida, lo siento, pero realmente todavía no lo sé;) He intentado siempre string.empty, pero con un decimal esto produce un error.VB Comprueba si int está vacío

¿Hay alguna función? Desafortunadamente, para las preguntas más simples, no hay respuestas en Google

Respuesta

15

Su título (y etiqueta) pregunta acerca de un "int", pero su pregunta dice que está obteniendo un error con un "decimal". De cualquier manera, no existe el término "vacío" cuando se trata de un value type (como un Integer, Decimal, etc.). No se pueden establecer en Nothing como podría con un reference type (como un String o clase). En cambio, los tipos de valor tienen un constructor predeterminado implícito que inicializa automáticamente las variables de ese tipo a su valor predeterminado. Para valores numéricos como Integer y Decimal, esto es 0. Para otros tipos, consulte this table.

para que pueda comprobar para ver si un tipo de valor se ha inicializado con el siguiente código:

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 

Tenga en cuenta que mySecondFavoriteNumber se inicializa automáticamente a 0 (el valor predeterminado para una Integer) detrás de las escenas por la compilador, por lo que la instrucción If es True. De hecho, la declaración de mySecondFavoriteNumber anterior es equivalente a la siguiente declaración:

Dim mySecondFavoriteNumber as Integer = 0 


Por supuesto, como te habrás dado cuenta, no hay manera de saber si el número favorito de una persona es realidad 0, o si simplemente no han especificado un número favorito todavía. Si realmente necesita un tipo de valor que se puede ajustar a Nothing, podría utilizar Nullable(Of T), declarar la variable en cambio, como:

Dim mySecondFavoriteNumber as Nullable(Of Integer) 

Y la comprobación para ver si se ha asignado de la siguiente manera:

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

Sólo una nota: en realidad * * puede asignar nada a un tipo de valor en VB.Net. Pero en ese caso, Nothing no significa 'nulo' sino 'predeterminado (T)', por lo que para los enteros es lo mismo que 0. – jeroenh

+0

@jeroenh: Eso es correcto. Tenga en cuenta que dije que no pueden establecerse en 'Nothing' * como podría hacerlo con un tipo de referencia *. Establecer un tipo de valor a 'Nothing' hará que se inicialice de nuevo a su tipo predeterminado. El punto es que no existe tal estado 'nulo' o "vacío" para los tipos de valores; ellos siempre contienen un valor. –

+0

Observe más recientemente, 'Dim mySecondFavoriteNumber as Integer?' Es lo mismo que 'Dim mySecondFavoriteNumber como Nullable (Of Integer)' –

0

Bueno, el valor predeterminado para un número sería 0, pero también se puede probar esto:

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

y luego comprobar la longitud o si la cadena 's' está vacía.

2

Tal vez lo que busca es anulable

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 
Cuestiones relacionadas