2010年09月09日

enumってnewできるんだ!

  

という列挙型に対して、


て書けちゃうんだ。

つい最近知りました。
なんで禁止されてないんだろう。


と同じといわれれば、そうなんだけど...

でも、


だとすると、


の x には、不正な値が入っちいますね。 まあ、new することなんてないから、いいけどね。


この記事へのコメント
>まあ、new することなんてないから、いいけどね。

C# だと

var x default(Days);

で、new することなく不正な値が代入できます。

そもそもで言えば、enum の値は 0 始まりとする、あるいは None = 0 のように未定義の状態を 0 で表すように推奨されているので、1 始まりな enum を定義すること自体避けるべきだと思います。

Posted by 渋木宏明 at 2010年09月10日 00:46
BaseType は、
System.Enum (構造体:new できる)で、
その説明には、0で初期化される。
0が定義に含まれない場合は、無効な値が含まれる
とありますね。
Posted by BLUEPIXY at 2010年09月10日 20:02
普段、default() って、ジェネリックスでしか使わないし、deafult使う場面も
あまりないので、忘れてました。

>1 始まりな enum を定義すること自体避けるべきだと思います。

そうですね。
Posted by Gushwell at 2010年09月10日 22:48
>その説明には、0で初期化される。

実体が整数であることを考えれば、自明ですが、ちゃんと書いてありましたね。
MSDNのクラスの説明で、これだけ詳しくガイドラインが載っているって珍しいですね。


Posted by Gushwell at 2010年09月10日 22:58
初めてコメントします。
レベルの高い内容が多く大変興味深く読ませて頂いています。
列挙体の0を意味のある値にしなければならないという件は、Bill Wagner氏のEffective C# 第1章項目8「値型における0を正常な値とすること」にも詳しく書かれています。
その他の項目も大変興味深いことが書かれていますので、まだ読まれていないのであれば一度ご一読されることをお勧めいたします。
Posted by のん at 2010年10月04日 00:38
のんさん
情報ありがとうございます。機会があったら読んでみようと思います。
Posted by Gushwell at 2010年10月05日 21:48
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52062996