0

データベースに格納されている単純な整数を列挙値にマップするための静的辞書を保持しています。

static Dictionary<long, EModelType> AttributeIdTypeToEModelType = 
   new Dictionary<long, EModelType>()
   {
      {1, EModelType.StatStr},
      {6, EModelType.HistStr},
      {7, EModelType.HistVal}
   };

大きな利点は、データがデータベースから到着するときに、列挙値を直接取得するために使用することです。

typ = AttributeIdTypeToEModelType[i];

このシステムの使用法はきちんとしていますが、これだけの静的辞書を持っていることは私にはきれいに見えません。

列挙子を使用してそれらの値をオーバーライドするためのよりクリーンな方法を見つけようとする機会はありませんでした。

何かアドバイス?

4

3 に答える 3

4

を適切なタイプDictionaryにキャストする必要はありません。intEnum

var type = (EModelType)yourInt;

または使用Enum.ToObject

var type = Enum.ToObject(typeof(EModelType) , yourInt);

そして、あなたはそれが存在することを確認することができますEnum.IsDefined

if (! Enum.IsDefined(typeof(EModelType), yourInt)) throw new ArgumentException("Illegal type");
于 2012-04-26T13:19:45.127 に答える
1

データベースの値が文字列の場合は、次を使用します。

EnumType x = (EnumType)Enum.Parse(typeof(EnumType), dr[0].ToString());

データベースの値が長い場合は、次を使用します。

EnumType x = (EnumType)dr[0];

列挙型の長い値が必要な場合は、次を使用します。

long x = (long)EnumType.SomeEnum
于 2012-04-26T13:21:56.203 に答える
0

次のように、列挙int型をバッキングタイプで定義する必要があります。

public enum EModelType : int
{
    StatStr = 1,
    HistStr = 6,
    HistVal = 7
}

次に、TimとChrisが提案したように、データベースから列挙型に整数をキャストまたは解析するだけです。

于 2012-04-26T13:32:31.570 に答える