C# 条件演算子 (?:) の暗黙的な型変換の制限
C# の条件演算子 (?:) は、簡潔な条件分岐構文を提供します。ただし、暗黙的な型変換に関しては、予期しない動作が発生することがあります。
次のコード スニペットを考えてみましょう:
<code class="language-csharp">bool aBoolValue; byte aByteValue; // 这段代码可以成功编译 if (aBoolValue) aByteValue = 1; else aByteValue = 0; // 这段代码编译失败,并出现错误:“无法将类型“int”隐式转换为“byte”。 aByteValue = aBoolValue ? 1 : 0;</code>
最初のコード スニペットはコンパイルされるのに、2 番目のコード スニペットが失敗するのはなぜですか?
C# における型推論の役割
コンパイラーはコードを分析するときに、使用されているコンテキストに基づいて変数と式の型を決定します。このプロセスは型推論と呼ばれます。通常、型推論は式の内部ではなく外部に推論されます。
最初のコード スニペットでは、コンパイラは、if-else ステートメントの各分岐の割り当てに基づいて aByteValue の型を推測します。aByteValue には、両方ともバイトである 1 または 0 の値が割り当てられます。したがって、コンパイラは、aByteValue がバイトであると推測します。
条件式の意味
条件演算子は、結果式と代替式という 2 つの式を評価します。条件式のタイプは、2 つの式のうち、より一般的なタイプです。
2 番目のコード スニペットでは、結果式と代替式の両方が整数 (それぞれ 1 と 0) に評価されます。したがって、コンパイラは条件式が int 型であると推測します。
互換性のあるタイプに変換
条件式は int として評価されるため、暗黙的にバイトに変換することはできません。この問題を解決するには、次のコードに示すように、式を明示的にバイトに変換する必要があります。
<code class="language-csharp">aByteValue = aBoolValue ? (byte)1 : (byte)0;</code>
以上がC#の条件付き演算子(?:)は、暗黙の型キャストに失敗することがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。