Eventuali duplicati:
Bug?? If you assign a value to a nullable integer via a ternary operator, it can't become nullQual è l'equivalente di VB.NET della parola chiave predefinita di C#?
Mentre questa domanda può sembrare come un duplicato di molti, in realtà è stato chiesto per un motivo specifico. Prendete questo codice, ad esempio:
Dim n As Integer? = If(True, Nothing, 1)
In quel codice, l'espressione ternaria dovrebbe ritorneremo Niente, ma è l'impostazione n a 0. Se questo fosse C#, potrei dire default(int?)
e sarebbe funzionare perfettamente. Ora sembra che dovrò mollare il ternario e usare un blocco regolare di If, ma voglio davvero usare il ternario.
Se Nulla era veramente VB.NET equivalente al valore predefinito di C#, come si può spiegare questo comportamento?
'Nothing' in questo caso equivale a' default (int) 'perché il tipo inferito basato sull'espressione è' int', non 'int?'. Questo può essere visto con 'If (true, Nothing, new Integer? (1))' – Marc
Quindi è sicuro dire che VB.NET * non ha * un equivalente di default di C#. Se così fosse, avrebbe potuto utilizzare l'inferenza del tipo per determinare che Niente, in questo caso, equivale al valore predefinito di un numero nullable che è Niente, non 0. – oscilatingcretin
In modo indiretto, è corretto. In C#, il 'default' prende un tipo, che può essere usato per l'inferenza. In VB, sembra che "Nothing" giochi il ruolo passivo in questo. – Marc