在设计时获取枚举的数值

本文关键字:枚举 获取 | 更新日期: 2023-09-27 18:33:07

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

显然,在

VB6 中可以使用快速信息执行此操作,但是有没有办法在设计时在 C# 中执行此操作?

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

在设计时获取枚举的数值

为什么不编写一个小程序来获取您的枚举并迭代枚举的所有字段以打印出类似"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# 遍历枚举?(索引系统阵列)

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

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

enum Whatever
{
  Value1 = 1, 
  Value2 = 2, 
  Value3 = 3
}

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

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

例如:

enum Days
{
Sunday,
Monday,
Tuesday,
}

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

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

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

你可以得到值

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

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

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

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

将鼠标悬停在调试器中时,将类型为 MyEnumToDebug 的变量同时看到名称和整数值。