情報を持ってるわけじゃあないんですが、一応僕の理解を書いておきましょう。
スタックオーバーフローの答えなんかも見てきましたがそんなに違う考えではありませんでしたし。
https://stackoverflow.com/questions/4728295/why-enums-require-an-explicit-cast-to-int-type
https://stackoverflow.com/questions/11968868/why-do-we-need-to-type-cast-an-enum-in-c-sharp
enumは列挙に特化しています。
C++からだと「列挙するとはつまり順番に1,2,3と振る事だよね?」というイメージがあると思いますが、C#の列挙値は違います。
列挙するとは、別々のものとして識別できることであって、数値に変換できることではないんです。
本来の利用目的が識別することなのだから、暗黙的な型キャストはその考えと相反してしまうんですよね。
例えば下記の例で男が0で女が1というのは本来意識すべきことじゃあないんです。
C#
1enum 性別
2{
3 男,
4 女
5}
男は男、女は女です。
もしも、特殊な目的(シリアライズ等)によって特定の型の特定の値を保持しなければならないのなら、それはconstの方がふさわしいと思います。
C#
1public static class Name
2{
3 public const byte mugicha = 0;
4}
これならば最初から特定の型として扱うことを目的にしているわけです。
列挙するというのはそもそも「値が破壊されやすい性質」であることに留意しておく必要があります。
必ず値を指定しなければならないconst値の方がそういう意味では安定しています。
ほぼそういった値は、後から値が変化してはならないはずですからね。
enumはenumとして扱うことを前提に組まれている。
そういう風に僕は考えてます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/23 12:32