【发布时间】:2015-12-30 08:17:20
【问题描述】:
我已经定义了以下enum:
public enum DeviceType
{
[Description("Set Top Box")]
Stb = 1,
Panel = 2,
Monitor = 3,
[Description("Wireless Keyboard")]
WirelessKeyboard = 4
}
我正在利用Description 属性来允许我提取出一个更易于用户阅读的枚举版本以显示在 UI 中。我使用以下代码获得描述:
var fieldInfo = DeviceType.Stb.GetType().GetField(DeviceType.Stb.ToString());
var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
var description = (attributes.Length > 0 ? attributes[0].Description : DeviceType.Stb.ToString());
上面的代码会给我:description = "Set Top Box"。如果没有设置Description 属性,它会给我枚举的字符串值。
我现在想为每个枚举添加第二个/自定义属性(例如,称为“值”)。例如:
public enum DeviceType
{
[Description("Set Top Box")]
[Value("19.95")]
Stb = 1,
[Value("99")]
Panel = 2,
[Value("199.99")]
Monitor = 3,
[Description("Wireless Keyboard")]
[Value("20")]
WirelessKeyboard = 4
}
我需要拉出新的Value 属性,就像我目前对Description 属性所做的一样。
是否可以扩展现有的Description 属性以以某种方式包含新的Value 属性,或者最好单独创建新属性?
【问题讨论】:
-
这是 XY 问题。你最终想达到什么目标?
-
您能否举例说明包含 value 属性的结果应该如何? (不是 100% 清楚你到底想要什么)
-
您可以扩展或创建一个新的,这不是什么大问题。但是我还要说,当您需要越来越多的枚举属性时,您也许应该考虑创建一个类。..
-
我似乎真的希望
DeviceType成为class而不仅仅是enum。类可以有多个属性。 -
我知道这是一个例子,但为什么会有一个
Value属性,它采用double的字符串表示?