Mögliche Duplizieren:
Bug?? If you assign a value to a nullable integer via a ternary operator, it can't become nullWas entspricht VB.NETs dem Standardschlüsselwort von C#?
Während diese Frage wie ein Duplikat von vielen erscheinen mag, ist es tatsächlich aus einem bestimmten Grund gefragt. Nehmen Sie diesen Code, zum Beispiel:
Dim n As Integer? = If(True, Nothing, 1)
In diesem Code, den ternären Ausdruck sollte Nichts zurückkehren, aber es ist Einstellung n auf 0. Wenn diese C# waren, konnte ich default(int?)
sagen und es wäre perfekt funktionieren. Jetzt sieht es so aus, als müsste ich das Ternary abbrechen und einen regulären If-Block verwenden, aber ich möchte das Ternär wirklich verwenden.
Wenn Nothing wirklich VB.NET äquivalent zu C# Standard war, wie können Sie dieses Verhalten erklären?
'Nothing' in diesem Fall entspricht' default (int) ', weil Ihr abgeleiteter Typ basierend auf dem Ausdruck' int' ist, nicht 'int?'. Dies kann man mit 'If (true, Nothing, new Integer? (1))' – Marc
sehen. Also kann man sicher sagen, dass VB.NET * kein Äquivalent von C# 's Standard hat. Wenn dies der Fall wäre, hätte es die Typinferenz verwenden können, um zu bestimmen, dass Nothing in diesem Fall dem Standardwert einer nullbaren Ganzzahl entspricht, der Nothing, nicht 0 ist. – oscilatingcretin
In einer indirekten Weise ist das korrekt. In C# nimmt der 'default' einen Typ an, der für eine Schlussfolgerung verwendet werden kann. In VB scheint "Nothing" die passive Rolle dabei zu spielen. – Marc