C# Bedingte Betreiber Fallstricke: implizite Gussprobleme
c #s bedingter Bediener (? :
) bietet eine kompakte Möglichkeit, bedingte Zuordnungen auszuführen. Ein häufiges Problem tritt jedoch beim Umgang mit Typkonvertierungen auf. Untersuchen wir dieses Szenario:
<code class="language-csharp">bool aBoolValue; byte aByteValue;</code>
Verwenden Sie eine if-else
Anweisung:
<code class="language-csharp">if (aBoolValue) aByteValue = 1; else aByteValue = 0;</code>
Dies erfasst ohne Fehler. Aber mit dem bedingten Operator:
<code class="language-csharp">aByteValue = aBoolValue ? 1 : 0;</code>
erzeugt einen "Fehler nicht implizit konvertieren" Fehler "int" in "Byte".
Verständnis der Ursache
Der Compiler bewertet den bedingten Ausdruck von innen nach außen. Die wörtlichen Werte 1
und 0
werden als Ganzzahlen behandelt (int
). Daher beträgt der Typ des gesamten bedingten Ausdrucks int
. C# konvertieren int
nicht implizit in byte
in int
, es sei denn, der Compiler kann den Wert byte
im Bereich aBoolValue
(0-255) garantieren. Da der
Die Lösung: Explizites Gießen
byte
Die Lösung besteht darin, das Ergebnis des Ausdrucks explizit auf ein
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0;</code>
int
Dies zeigt dem Compiler ausdrücklich unsere Absicht, das Ergebnis byte
in ein
Dieses Beispiel unterstreicht die sorgfältige Berücksichtigung der impliziten Typkonvertierungen bei der Verwendung des bedingten Operators. Während es eine kurze Syntax bietet, ist das Verständnis seines Verhaltens des Typs und bei Bedarf explizite Abgüsse, um unerwartete Kompilierungsfehler zu vermeiden.
Das obige ist der detaillierte Inhalt vonWarum gibt mein bedingter C#-Operator den Fehler „Implizite Umwandlung nicht möglich' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!