Raten Sie das Ergebnis i
:Nullable Typ Rückschluss in Visual Basic - ist es irgendwo dokumentiert und kann es strenger gemacht werden?
Dim i As Integer? = If(True, Nothing, 3)
Antwort: 0
Wenn Sie erwarten, Nothing
zu bekommen, müssen Sie die Integer-Argument ändern:
Dim i As Integer? = If(True, Nothing, New Nullable(3))
Wie Sie sehen können , Rückschluss auf den Ergebnistyp vom 2. und 3. Parameter bevorzugt T
vor Nullable(Of T)
. Für mich wäre logisch das Gegenteil.
Wo finden sich diese Inferenz-/Priorisierungsregeln der Typen (speziell von Nullable
) dokumentiert? Ich überprüfte Hilfe für type inference
, Nullable
und If
, aber ich kann nichts finden.
Ein Blick zu den Nachbarn: c# (schön) weigert sich, das Äquivalent
int? i = true ? null : 3;
mit Fehler
CS0173 Art des bedingten Ausdruck zu kompilieren kann nicht bestimmt werden, weil es keine implizite Konvertierung ist
'<null>'
zwischen und 'int'
was sicher ist und vermeidet fallen in den Fang zu sehen n in der vb.net. Aber in der VB, sogar Option Infer Off
+ Option Strict On
haben keine Fehler-werfen-Effekt, der Programmierer vor unbemerkten Fehlern speichern könnte. Oder gibt es eine Möglichkeit, auch im vb.net einen Fehler zu erzeugen?
@GSerg - hah, ich habe mich immer gewundert, ob ein gültiger Grund dafür bestehen kann, dass ich für das Schließen meiner eigenen Frage stimmen werde. Jetzt habe ich gewählt ... – miroxlav