Heim >Backend-Entwicklung >C++ >Warum scheitert '? 10: null' mit nullierbaren Typen in C#?
Die drei Yuan -Computersymbole und der leere Typ: Lösen Sie das Geheimnis von "? 10: null"
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
10
Der Compiler versucht zunächst, den richtigen Ausdruck zu bewerten. Es begegnet buchstäblich int
und leere Zeichen int?
, sie sind nicht kompatibel. null
Lösung des Typs stimmt nicht mit 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?
<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 leereskonvertiert werden.
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!