2012-05-09 7 views
0

列挙定数が一意の整数値にマップされるようにC#には何らかの方法があります。c#列挙定数は一意の整数値にマップされます

public enum Color 
{ 
None =0, 
red = 1, 
blue= 2, 
white = 3 
} 

ここで私が "白を3から2に変更"すると、コンパイルエラーが発生するはずです。

私のプロジェクトでは、定数のDBの列挙型整数値を保存しています。 誰かが列挙型(たとえば黒色)で新しい定数を追加した場合のように、enumに制約が必要です。ユーザーは一意の数値にenum定数を指定する必要があります。

おかげ

+5

明示的な値の指定を省略して、コンパイラにそれらを決定させることはできますか? –

+0

また、C#4.0以降を使用していますか?その場合は、[コード契約](http://blogs.msdn.com/b/bclteam/archive/2008/11/11/introduction-to-code-contracts-melitta-andersen.aspx)を活用してコンパイル時の静的なアサートをシミュレートします。 –

答えて

3

最善のことは、明示的にenum定義で値を設定していないだろう。 enum定義にコメントを追加して、誰かに追加するようにして、最後に追加するようにします。例えば

public enum Color 
{ 
    None, 
    red, 
    blue, 
    white, 
    // **NEW ENTRIES MUST ONLY BE ADDED AT THE END OF THE ENUM** 
} 

あるいは内蔵Color構造及びそのToArgb()方法を使用します。または実際にはKnownColorの列挙型です。

+1

明示的に_and_の値を設定してコメントを追加します。ちょうどその場合... ;-) –

+1

@UweKeim:ちょうど何の場合?コンパイラは正常に動作しなくなりますか? :) – Nick

+0

間に誰かがまだ挿入している場合、少なくとも私のデータベースの値はまだ有効です。エントリの画面の高さが複数含まれている列挙型を想像してみてください。底にヒントが見えないかもしれません。ヒントをトップに挿入するのを避けるために、私は明示的に整数値を書くことを好むでしょう。 –

関連する問題