C# 条件演算子と暗黙的なバイト キャスト: 型の安全性の問題
暗黙的なバイト キャストで条件演算子 (? :
) を使用すると、C# でコンパイル エラーが発生する可能性があります。 たとえば、aByteValue = aBoolValue ? 1 : 0;
は簡単に見えますが、型の互換性がないために失敗します。
C# の強力な型指定システムでは、代入に互換性のある型が必要です。条件演算子のタイプは、その true と false の式によって決まります。 この例では、1
と 0
は整数なので、式全体が整数になります。 byte
の範囲は aByteValue
よりも小さいため、この整数を byte
変数 (int
) に代入することには問題があります。 コンパイラは、型の安全性を維持するために、この暗黙的な変換を防ぎます。
この解決策には、明示的なキャストが含まれます: aByteValue = aBoolValue ? (byte)1 : (byte)0;
。これにより、整数リテラルが明示的にバイトに変換され、型の不一致が解決されます。
この動作は、代入ターゲットとは関係なく式の型の決定を優先する C# の型推論メカニズムに由来します。これにより、さまざまな型の複数の代入ターゲットがある場合でも、型の安全性が確保されます。
このルールの唯一の例外はラムダ式です。ラムダ式では、周囲のコードとの互換性のためにコンテキストベースの型推論が採用されます。
以上が暗黙的なバイト キャストで条件演算子を使用すると C# がエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。