Heim >Backend-Entwicklung >C++ >Warum versagt mein C# ternärer Operator mit nullbaren Typen: `getBoolValue ()? 10: null`?
c# Nullierbare Typen und der ternäre Operator: Auflösungstyp Inkonsistenzen
In C#kann die Verwendung des ternären Operators (? :
) mit nullbaren Typen (wie int?
) zum Fehler führen. "Die bedingte Expression kann nicht bestimmt werden ...". Dies geschieht, wenn die wahren und falschen Zweige des ternären Operators inkompatible Typen haben. Beispielsweise schlägt GetBoolValue() ? 10 : null
fehl, weil 10
ein int
ist und null
das Fehlen eines Wertes darstellt. Der Compiler kann sich nicht über einen einzelnen Typ für den Ausdruck entscheiden.
Das Problem beruht auf dem Bedarf des ternären Bedarfs nach einem konsistenten Rückgabetyp. Während null
einer nullbaren Ganzzahl (int?
) zugeordnet werden kann, kann eine einfache int
nicht implizit ein int?
.
Hier sind verschiedene Möglichkeiten, dies zu korrigieren:
Explizit auf nullable Ganzzahl gegossen: Die Ganzzahl buchstäblich zu int?
:
<code class="language-csharp">x = GetBoolValue() ? (int?)10 : null;</code>
explizite NULL -Konvertierung: explizit null
zu int?
:
<code class="language-csharp">x = GetBoolValue() ? 10 : (int?)null;</code>
Verwenden des Schlüsselworts default
: Das Schlüsselwort default
bietet eine Art vom Typ Typ, um den Standardwert für einen Typ zu erhalten, der null
für Nullable-Typen:
<code class="language-csharp">x = GetBoolValue() ? 10 : default(int?);</code>
Diese Lösungen gewährleisten die Typ -Konsistenz, sodass der Compiler den Typ des ternären Ausdrucks als int?
korrekt schließt und so den Kompilierungsfehler auflöst. Wählen Sie die Methode aus, die Ihren Codierungsstil- und Lesbarkeitseinstellungen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWarum versagt mein C# ternärer Operator mit nullbaren Typen: `getBoolValue ()? 10: null`?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!