C# では、条件演算子が暗黙的に null 許容型にキャストできないのはなぜですか? 質問する

C# では、条件演算子が暗黙的に null 許容型にキャストできないのはなぜですか? 質問する

暗黙的なキャストが失敗する理由が知りたいのですが...

int? someValue = SomeCondition ? ResultOfSomeCalc() : null;

そしてなぜ明示的なキャストを実行する必要があるのか

int? someValue = SomeCondition ? ResultofSomeCalc() : (int?)null;

コンパイラは暗黙的なキャストの決定を行うために必要なすべての情報を持っているように思えますが、違いますか?

ベストアンサー1

C# 3.0 仕様の関連セクションは 7.13、条件演算子です。

?:演算子の2番目と3番目のオペランドは条件式の型を制御します。XとYを2番目と3番目のオペランドの型とします。

X と Y が同じ型の場合、これが条件式の型になります。それ以外の場合、X から Y への暗黙的な変換 (§6.1) が存在するが、Y から X への暗黙的な変換は存在しない場合、Y が条件式の型になります。それ以外の場合、Y から X への暗黙的な変換 (§6.1) が存在するが、X から Y への暗黙的な変換は存在しない場合、X が条件式の型になります。それ以外の場合、式の型を判別できず、コンパイル時エラーが発生します。

おすすめ記事