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

您不需要将 aDictionary转换int为适当的Enum类型:

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 回答