我正在处理的应用程序有很多枚举。
这些值通常从应用程序中的下拉列表中选择。
存储这些值的字符串描述的普遍接受的方式是什么?
以下是目前的问题:
Public Enum MyEnum
SomeValue = 1
AnotherValue = 2
ObsoleteValue = 3
YetAnotherValue = 4
End Enum
下拉列表应包含以下选项:
Some Value
Another Value
Yet Another Value (Minor Description)
并非所有符合枚举的名称,(一个的小描述都是示例),并非所有枚举值都是-current-值。有些仅用于向后兼容和显示目的(即打印输出,而不是表单)。
这会导致以下代码情况:
For index As Integer = 0 To StatusDescriptions.GetUpperBound(0)
' Only display relevant statuses.
If Array.IndexOf(CurrentStatuses, index) >= 0 Then
.Items.Add(New ExtendedListViewItem(StatusDescriptions(index), index))
End If
Next
这似乎可以做得更好,而且我不确定如何。
答案 0 :(得分:11)
您可以使用Description
属性(C#代码,但应该翻译):
public enum XmlValidationResult
{
[Description("Success.")]
Success,
[Description("Could not load file.")]
FileLoadError,
[Description("Could not load schema.")]
SchemaLoadError,
[Description("Form XML did not pass schema validation.")]
SchemaError
}
private string GetEnumDescription(Enum value)
{
// Get the Description attribute value for the enum value
FieldInfo fi = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute), false);
if (attributes.Length > 0)
{
return attributes[0].Description;
}
else
{
return value.ToString();
}
}
答案 1 :(得分:3)
我会将它们放在resource file中,其中键是枚举名称,可能带有前缀。这样,您也可以轻松地本地化字符串值。
答案 2 :(得分:1)
我见过的最常见的方法是使用System.ComponentModel.DescriptionAttribute
为您的枚举添加注释。
Public Enum MyEnum
<Description("Some Value")>
SomeValue = 1
...
然后获取值,使用扩展方法(原谅我的C#,我会在一分钟内转换它):
<System.Runtime.CompilerServices.Extension()>
Public Function GetDescription(ByVal value As Enum) As String
Dim description As String = String.Empty
Dim fi As FieldInfo = value.GetType().GetField(value.ToString())
Dim da =
CType(Attribute.GetCustomAttribute(fi,Type.GetType(DescriptionAttribute)),
DescriptionAttribute)
If da Is Nothing
description = value.ToString()
Else
description = da.Description
End If
Return description
End Function
这是我将它转换为VB的最好方法。将其视为伪代码;)