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
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
@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. –
Observe más recientemente, 'Dim mySecondFavoriteNumber as Integer?' Es lo mismo que 'Dim mySecondFavoriteNumber como Nullable (Of Integer)' –