2

重複の可能性:
条件付き演算子は暗黙的にキャストできませんか?

条件演算子を使用してステートメントを記述する場合、いずれかの式が数値である場合、それらは常にint型として解釈されます。shortこれにより、この演算子を使用して変数を割り当てるためにキャストが必要になります。

bool isTrue = true;
int intVal = isTrue ? 1 : 2;
short shortVal = isTrue ? 1 : 2;  // Compile error: Cannot implicitly convert type 'int' to 'short'. 

shortコンパイラーは、典型的な代入ステートメント ( ) の場合と同様に、両方の値が有効な値であることを認識できるべきではありませんshort shortVal = 1;か?

4

2 に答える 2

3

これは、1 と 2 がints であるためです。?:あなたの場合、2番目と3番目のオペランドと同じタイプを返します。


編集:私のVS2008ではこれが機能します:

short x = true ? 1 : 2;

私は何か間違ったことをしましたか?


編集:確かに、違いはtrueコンパイル時の定数でした。非定数式の場合、同じエラー メッセージが表示されました。

于 2010-03-01T14:56:39.267 に答える
3

条件演算子 (別名三項演算子) が常に int を返すわけではありません。これは、リテラルが int であるためです。

残念ながら、C# にはバイトまたはショートのリテラル指定子がないようです (ただし、ロングにはあります)。

于 2010-03-01T14:56:48.660 に答える