C# 条件演算子と暗黙的な型変換の問題
C# の条件演算子 (?:
) は、予期しない型変換エラーを引き起こす可能性があります。 一般的なシナリオには、ブール値をバイト変数に割り当てることが含まれます:
<code class="language-csharp">byte aByteValue; bool aBoolValue = true; aByteValue = aBoolValue ? 1 : 0; // Error: Cannot implicitly convert type 'int' to 'byte'</code>
条件演算子の型はオペランド (1 と 0) によって決まるため、このコードは失敗します。 C# は、これらのリテラル数値を int
型として扱います。 したがって、演算子は int
の結果を生成しますが、これを暗黙的に byte
.
ターゲット変数の型によって変換が決まる一般的な代入とは異なり、条件演算子は分岐の共通型を優先します。この場合、両方の分岐が暗黙的に int
に変換可能であり、int
が結果の型になります。
解決策: 明示的なキャスト
解決策は、条件式を byte
:
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0; // Correct</code>
この明示的なキャストにより、条件式が byte
に評価されることが保証され、暗黙的な変換エラーが解決されます。 コンパイラは意図された型を理解し、必要な変換を安全に実行します。
以上がC# の条件演算子で暗黙的な型変換が失敗する理由とその解決方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。