在设计时获取枚举的数值?

时间:2012-05-03 11:23:09

标签: c# enums

我的一位同事今天问我是否有可能在设计时获得枚举的价值。我指出在运行时使用强制转换和即时窗口很容易做到这一点。

显然在VB6中可以使用快速信息来实现这一点,但有没有办法在设计时用C#做到这一点?

枚举很大,并将其值作为int存储在数据库中。我们有一个错误,我们怀疑数据库中的值不再与枚举同步(可能是由于有人编辑了枚举),我们需要知道数据库中的值实际指的是什么。

6 个答案:

答案 0 :(得分:1)

为什么不编写一个带有枚举的小程序,并遍历枚举的所有字符,打印出类似“EnumEntry = EnumValue”的内容。您可以获得枚举的所有字段的明确描述,并可以进行进一步的设计时间分析。

Array values = Enum.GetValues(typeof(myEnum));

foreach( MyEnum val in values )
{
   Console.WriteLine (String.Format("{0}: {1}", Enum.GetName(typeof(MyEnum), val), val);
}

从这里开始:C# Iterating through an enum? (Indexing a System.Array)

答案 1 :(得分:1)

如果您有一个包含枚举的数据库表,并且您希望将其与c#中的枚举排成一行,我建议您执行以下操作:

enum Whatever
{

  Value1 = 1, 
  Value2 = 2, 
  Value3 = 3
}

这样做,你可以将你的主键(可能自动递增)与枚举对齐,它不会改变。如果有人出现并希望添加一些随机枚举值,则不会影响现有值。

答案 2 :(得分:1)

您可以在设计时使用立即窗口,除非它是Web应用程序和其他几个。一些事情:String.Format(“{0:D}”, enumValue

答案 3 :(得分:0)

如果没有给出显式值,枚举成员从0开始递增1.您可以使用它来确定枚举的数值。

例如:

enum Days
{
Sunday,
Monday,
Tuesday,
}

在上面,星期日= 0,星期一= 1,依此类推......

答案 4 :(得分:0)

是的,在C#中也是可能的,如果你没有明确定义值,它会从0开始分配值,但你也可以分配你的值;

enum Days
{
Sunday=10,
Monday=20,
Tuesday=30,
}

你可以获得价值

console.WriteLine((int)Days.Sunday); //print 10
console.WriteLine(Days.Sunday); //print Sunday

答案 5 :(得分:0)

我想您希望直接在调试器中看到enum整数值,而不是名称

您可以使用DebuggerDisplayAttribute实现此目的(请注意,原始对象可视化必须关闭)。只需装饰您的enum声明,如下所示:

[DebuggerDisplay("{ToString()} ({ToString(\"d\")})")]
enum MyEnumToDebug
{
}

当您在调试器中悬停类型为MyEnumToDebug的变量时,您会看到名称和整数值。