Die ternären Computersymbole und leeren Typen in der C#: Limit -Details
Bei der Verarbeitung des leeren Werttyps das ternäre Computersymbol (? :) kann unerwartete Verhaltensweisen haben. Ein häufiges Problem ist es, das ternäre Computing -Symbol zu verwenden, um der Variablen der Kanal -Ganzzahl einen ganzzahligen Charakter oder Null -Null zuzuweisen.
Betrachten Sie beispielsweise den folgenden Code:
In diesem Code versucht das ternäre Computersymbol, den richtigen Ausdruck zu berechnen:
<code class="language-csharp">int? x = GetBoolValue() ? 10 : null;</code>
unter ihnen, zu einem booleschen Wert zurückkehren, 10 ist ein ganzzahliges wörtliches, null ist eine leere Referenz. Der Compiler versucht, diese Werte in den Typ des linken Ausdrucks zu konvertieren, dh
<code class="language-csharp">GetBoolValue() ? 10 : null</code>
GetBoolValue()
Es gibt jedoch keine versteckte Umwandlung zwischen dem wörtlichen Volumen (nicht leer) und der leeren Ganzzahl (int?
). In ähnlicher Weise gibt es keine versteckte Umwandlung zwischen Null und Ganzzahl. Dies verursacht den Compiler -Fehler:
int?
Um dieses Problem zu lösen, muss der richtige Ausdruck geändert werden, um sicherzustellen, dass die beiden Zweige des drei -Yuan -Operators die mit dem linken Ausdruck kompatibelen Werte zurückgeben. Dies kann durch implizite Konvertierung oder explizite Konvertierung erreicht werden:
<code>无法确定条件表达式的类型,因为整型和<null>之间没有隐式转换。</code>
Durch diese Modifikationen kann der Compiler den richtigen Ausdruck erfolgreich berechnen und den Typ des bedingten Ausdrucks bestimmen, um Fehler zu beseitigen.
Das obige ist der detaillierte Inhalt vonWarum versagt der ternäre Operator mit nullbaren Typen in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!