dim val1 As Integer? = If(5 > 2, Nothing, 43)
" val1 = 0
dim val1 As Integer? = If(5 > 2, Nothing, Nothing)
" val1 = Nothing
¿Lo que da? ¿Es esto un error, o estoy pasando por alto algo?
Respuestas
13 para la respuesta № 1El problema es ese Nothing
en VB.NET funciona de manera diferente a, por ejemplo, null
Cía#. Cuando Nothing
se utiliza en el contexto de un tipo de valor (como Integer
) representa el valor por defecto de ese tipo. En este caso, esa "s 0.
En su primer ejemplo, ambas ramas del operador ternario son válidas Integer
valores. La rama verdadera representa 0 y la rama falsa representa 43.
En el segundo ejemplo, ninguna rama del operador ternario es válida Integer
valor, lo que obliga al compilador VB.NET a asumir que el operador general devuelve Object
no Integer
.
Para que el primer ejemplo funcione de la manera que usted pretende, debe dejarle claro al compilador que el operador ternario debe resolver a un Integer?
, no un Integer
o un Object
. Puedes hacerlo así:
dim val1 As Integer? = If(5 > 2, Nothing, New Integer?(43))
Haciendo explícitamente la rama falsa del operador una Integer?
, el Nothing
en la rama verdadera representará el valor nulo, en lugar del valor predeterminado Integer
valor.