Heim >Backend-Entwicklung >C++ >Warum scheitert '? 10: null' mit nullierbaren Typen in C#?

Warum scheitert '? 10: null' mit nullierbaren Typen in C#?

Susan Sarandon
Susan SarandonOriginal
2025-01-28 22:10:10948Durchsuche

Why Does

Die drei Yuan -Computersymbole und der leere Typ: Lösen Sie das Geheimnis von "? 10: null"

Wenn Sie sich mit leeren Typen befassen und verstehen, dass sie mit anderen Datentypen im Ausdruck kompatibel sind. Ein gemeinsames Szenario kann zufällige Fehler verursachen, dh das drei -Yuan -Computersymbol werden zusammen mit dem leeren Typ und dem nicht schweren Typ verwendet.

Betrachten Sie das folgende Codefragment:

<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>
Das Ziel hier ist: Wenn

GetBoolValue() zurückgibt, wird der Wert 10 der leeren Ganzzahl true zugeordnet; Der Compiler markiert jedoch einen Fehler: x x null Frage -Interpretation

<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>

Dieser Fehler unterstreicht das Problem der Nicht -Matching -Typen im Drei -Yuan -Ausdruck. Der linke Ausdruck gibt einen -Werwert zurück, und das Parsen ist oder

. Der richtige Ausdruck versucht, zwei Ausdrücke zu kombinieren:

GetBoolValue() bool , dies ist ein wörtliches Volumen (nicht true). false

, das ist ein leeres Wort.
  • 10 Der Compiler versucht zunächst, den richtigen Ausdruck zu bewerten. Es begegnet buchstäblich int und leere Zeichen int?, sie sind nicht kompatibel.
  • und definieren keine versteckte Konvertierung, was zu unvollständigen Arten von Typen führt.
  • null Lösung des Typs stimmt nicht mit
überein

Um dieses Problem zu lösen, muss der richtige Ausdruck mit der Art der leeren Typen kompatibel sein. Es gibt verschiedene Möglichkeiten: <:> int 10 null konvertierte das wörtlich zu int: null

Verwenden Sie den leeren Typ oder den Standardwert:

  • implizite Konvertierung int?

    Die in der akzeptable Antwort erwähnte versteckte Konvertierung lautet:
    <code class="language-c#">  x = GetBoolValue() ? (int?)10 : null;</code>
  • zu : Der leere Typ

    kann implizit in
    <code class="language-c#">  x = GetBoolValue() ? 10 : (int?)null;
      x = GetBoolValue() ? 10 : default(int?);</code>
    konvertiert werden.

to : Nicht -mepty

kann in leeres

konvertiert werden.

  • Durch kompatibel mit dem Typ des richtigen Ausdrucks können Sie das Problem lösen, dass der Typ nicht mit dem Problem übereinstimmt, und den entsprechenden Wert entsprechend dem -Renditewert verteilen. int?

Das obige ist der detaillierte Inhalt vonWarum scheitert '? 10: null' mit nullierbaren Typen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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