2011-10-07 6 views
7

前もって謝罪している人がいるかもしれませんが、私はそれを見つけることができませんでした。列挙型、重複する値、C#

ちょっと驚いたことに、同僚と私は両方とも同じ値を列挙型に追加しました。

enum MyEnum 
    { 
    mine = 1, 
    his = 1 
    } 

C/C++のように見えます(?)。この動作の理由、それが有用な場合私は違い、人間の言語(1 = 1、アインス= 1、など)で1ケースを見ましたが、

おかげで

+0

だから多分あなたは、あなたがそれらの値が何であるかについてのあなたの*ケア*値が明示的に作っている場合は、この '列挙MyEnum 、おそらく' – V4Vendetta

+0

{ [廃止]鉱山は1、 彼= 1 を=}行うことができ、そのような紛争は起こらないはずです。各メンバーがどのような価値を表しているか気にしない場合は、明示的にすることはできず、矛盾は生じません。 –

答えて

8

簡単な例

enum PrivilegeLevel 
{ 
    None, 
    Reporter, 
    Reviewer, 
    Admin, 
    DefaultForNewUser = None, 
    DefaultForProjectOwner = Reviewer, 
}; 
+0

定数のバイナリバージョン化のセマンティクスのために悪い考えがします。 – CodesInChaos

+0

定数のバージョン管理の意味はどういう意味ですか? – crazyjul

+0

@crazyjul定数のバージョンは変更できません。定数を変更した場合(それは矛盾です)、これまで使用していたすべてのアセンブリは、以前の値を使用しているため、今すぐ破損しています。あなたはpiの値を変更しないでしょうか?しかし、デフォルトの特権レベルを変更したいかもしれません。 –

0

アイデアを見てみましょう私は確信していません制限された範囲の値しか取れない新しいデータ型を作成することです。

あなたがしたことは正当なものであり、コンパイラはエラーを出すべきではありません。enumは単なる定数を表します。あなたはあなたの定数に論理名を与えているだけです。

名前付き定数を区切る必要がある場合は、複数の列挙定数に同じ値を割り当てることができます。それらの背後に同じ基本的な色を使った配色がありますが、スキームは論理的に分離する必要があります。次に、enum定数に同じ値を使用できます。しかし、まだそれを行うより良い方法があります。

+1

"2つ以上の列挙定数に同じ値を代入すると、列挙の目的はすべて失われます。"同意しません。列挙型の目的は、マジックナンバーの代わりに名前を使用できるようにすることです。同じマジックナンバーの2人の名前がどうやって悪いのか分かりません。 –

+0

@ R.MartinhoFernandes:私はあなたの意見に全面的に同意します。エイリアスが良いことがある時があります。 –

+0

私はそれがC++のtypedefよりも悪くないと思う、ちょうど当時驚いた – tony