2008年5月3日土曜日

[.NET]三項演算子のなぞ

C#には、暗黙の型変換で数値型の変数にキャストすることなく値をセットすることもできます。
また、明示的に数値に型を持たせることができます。例を書くとこんな感じ。

byte b = 100;
int i = 100;
int ii = 100L;// 明示的に型指定するのでコンパイルエラー
long l = 100;
double d = 100;

また、3項演算子という構文があります。これはif文と代入を組み合わせたような構文になります。

int foo = 0;
foo = foo == 0 ? 100 : 0//コンパイルOK

byte bar = 0;
bar = bar == 0 ? 100 : 0//コンパイルNG

long hoge = 0;
hoge = hoge == 0 ? 100 : 0//コンパイルOK


暗黙の型変換で、barもコンパイルが通るような気がします。気になったので、イミディエイトで以下を実行してみました。

(foo == 0 ? 100 : 0).GetType()


すると、型はSystem.Int32でした。

ということで値の桁落しないlongはそのまま値が設定可能で、オーバーフローするbyte型はキャストしないと問題が発生する可能性があるということで、コンパイラーが教えてくれるってことなんでしょう。。。

0 件のコメント: