我的一位同事今天问我是否有可能在设计时获得枚举的价值。我指出在运行时使用强制转换和即时窗口很容易做到这一点。
显然在VB6中可以使用快速信息来实现这一点,但有没有办法在设计时用C#做到这一点?
枚举很大,并将其值作为int存储在数据库中。我们有一个错误,我们怀疑数据库中的值不再与枚举同步(可能是由于有人编辑了枚举),我们需要知道数据库中的值实际指的是什么。
答案 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
的变量时,您会看到名称和整数值。