c#条件付き演算子落とし穴:暗黙の鋳造の問題
c# 'の条件付き演算子(? :
<code class="language-csharp">bool aBoolValue; byte aByteValue;</code>
ステートメントを使用:if-else
<code class="language-csharp">if (aBoolValue) aByteValue = 1; else aByteValue = 0;</code>
<code class="language-csharp">aByteValue = aBoolValue ? 1 : 0;</code>
コンパイラは、内側から条件付き式を評価します。 文字通りの値
およびは、整数(1
)として扱われます。 したがって、条件式全体のタイプは0
です。 C#は、コンパイラがint
値がint
の範囲内(0-255)内にあることを保証できない限り、暗黙的にint
にbyte
に変換しません。 int
は定数ではないため、コンパイラはこれを保証することはできません。
byte
aBoolValue
解決策:明示的なキャスト
解決策は、式の結果を:
に明示的にキャストすることです。
byte
これは、コンパイラに
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0;</code>
int
この例では、条件付き演算子を使用する場合、暗黙の型変換を慎重に検討する必要性を強調しています。簡潔な構文を提供しますが、その種類の処理動作を理解し、必要に応じて明示的なキャストを採用することは、予期しないコンピレーションエラーを回避するために不可欠です。
以上がなぜ私のC#条件付きオペレーターが「暗黙的にキャストできない」エラーを投げるのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。