2

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

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

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

4

6 回答 6

1

Why not writing a little program that takes your enum and iterates over all fiels of the enum to print out something like "EnumEntry = EnumValue". That you get a explicit description for all fields of your enum and can do further design time analysis.

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

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

from here: C# Iterating through an enum? (Indexing a System.Array)

于 2012-05-03T11:28:00.183 回答
1

如果您有一个带有枚举的数据库表,并且您想将其与 c# 中的枚举对齐,我建议您执行以下操作:

enum Whatever
{

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

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

于 2012-05-03T11:31:03.383 回答
1

您可以在设计时使用即时窗口,除非它是 Web 应用程序和其他少数应用程序。下线: String.Format("{0:D}", enumValue )

于 2013-07-22T10:51:21.280 回答
0

我猜您想enum直接在调试器中查看整数值而不是它们的名称

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

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

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

于 2012-05-03T11:42:31.403 回答
0

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

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

你可以得到值

console.WriteLine((int)Days.Sunday); //print 10
console.WriteLine(Days.Sunday); //print Sunday
于 2012-05-03T11:33:09.280 回答
0

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

例如:

enum Days
{
Sunday,
Monday,
Tuesday,
}

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

于 2012-05-03T11:24:49.163 回答