Heim > Backend-Entwicklung > C++ > Warum ist 'getBoolValue ()? 10: null` verboten in einem C# ternären Operator?

Warum ist 'getBoolValue ()? 10: null` verboten in einem C# ternären Operator?

Susan Sarandon
Freigeben: 2025-01-28 22:07:16
Original
827 Leute haben es durchsucht

Why is `GetBoolValue() ? 10 : null` Forbidden in a C# Ternary Operator?

c# ternärer Operator und nullable Ganzzahlen: Warum ? 10 : null fällt

fehl

Der C# ternäre Operator (condition ? value1 : value2) erfordert, dass sowohl value1 als auch value2 kompatible Typen haben. Lassen Sie uns untersuchen, warum der folgende Code einen Compiler -Fehler erzeugt:

<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
Nach dem Login kopieren

Die Fehlermeldung "Art des bedingten Ausdrucks kann nicht bestimmt werden, da keine implizite Konvertierung zwischen 'int' und ''" besteht, unterstreicht das Kernproblem. Der Compiler interpretiert 10 als int und null als null (was in diesem Zusammenhang das Fehlen eines Wertes darstellt). Da es keine automatische Umwandlung zwischen einem int und einem Nullwert gibt, kann der Compiler nicht auf den resultierenden Typ des ternären Ausdrucks schließen.

Lösungen:

Um dies zu beheben, müssen wir die Konsistenz des Typs sicherstellen. Hier sind mehrere Ansätze:

  1. explizit 10 auf eine nullbare Ganzzahl gegossen (int?):

    <code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
    Nach dem Login kopieren

    Dies sagt dem Compiler ausdrücklich mit, dass 10 als nullable Ganzzahl behandelt werden sollte, sodass der null ein gültiger zweiter Zweig sein kann.

  2. explizit null auf eine nullbare Ganzzahl gegossen:

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
    Nach dem Login kopieren

    Dies wirft ausdrücklich null zu int? und macht beide Seiten des ternären Operators kompatibel.

  3. Verwenden Sie den Standardwert für int?:

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
    Nach dem Login kopieren

    default(int?) bewertet null und bietet eine Art von Typ-sicher, um den Nullfall darzustellen. Dies wird oft für Klarheit bevorzugt.

Alle drei Lösungen erzielen das gleiche Ergebnis: x wird entweder 10 (als int?) oder null basierend auf dem Ergebnis von GetBoolValue() zugewiesen. Der Schlüssel besteht darin, sicherzustellen, dass beide Zweige des ternären Operators den gleichen kompatiblen Typ haben. Die Verwendung des Schlüsselworts default wird im Allgemeinen als lesbarste und wartbarste Lösung angesehen.

Das obige ist der detaillierte Inhalt vonWarum ist 'getBoolValue ()? 10: null` verboten in einem C# ternären Operator?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage