Duplicar posible:
Bug?? If you assign a value to a nullable integer via a ternary operator, it can't become null¿Cuál es el equivalente de VB.NET de la palabra clave predeterminada de C#?
Aunque esta pregunta puede parecer como un duplicado de muchos, en realidad se le pide por una razón específica. Tome este código, por ejemplo:
Dim n As Integer? = If(True, Nothing, 1)
En ese código, la expresión ternaria debe regresarán nada, pero está configurando n a 0. Si esto fuera C#, podría decir default(int?)
y que iba a funcionar perfectamente. Ahora parece que tendré que abandonar el ternario y usar un bloque If normal, pero realmente quiero usar el ternario.
Si nada fuera realmente el equivalente de VB.NET al predeterminado de C#, ¿cómo se puede explicar este comportamiento?
'Nothing 'en este caso equivale a' default (int) 'porque su tipo inferido basado en la expresión es' int', no 'int?'. Esto se puede ver con 'If (true, Nothing, new Integer? (1))' – Marc
Por lo tanto, es seguro decir que VB.NET * no * tiene el equivalente de C# por defecto. Si lo hiciera, podría haber utilizado la inferencia de tipo para determinar que Nothing, en este caso, equivale a un valor por defecto de un entero nulo que es Nothing, no 0. – oscilatingcretin
De forma indirecta, eso es correcto. En C#, el 'predeterminado' toma un tipo, que se puede usar para inferir. En VB, parece que 'Nothing' juega el papel pasivo en esto. – Marc