你能访问一个特定枚举值的长描述吗?

我通常访问enum描述为相应的值,如:

Enum.GetName(typeof(MyEnum),myid);

我需要一个枚举,可以使用任何字符,如“你好世界%^ $£%&”

我看到有人附加属性并添加如下扩展名:

http://weblogs.asp.net/stefansedich/archive/2008/03/12/enum-with-string-values-in-c.aspx

但我无法解决这个问题是否可以用来访问长描述。

任何人做过类似的事情

谢谢

戴维


为什么它不能解决?

您可以通过从属性中插入来创建自己的属性

public class EnumInformation: Attribute
{
    public string LongDescription { get; set; }
    public string ShortDescription { get; set; }
}

public static string GetLongDescription(this Enum value) 
{
    // Get the type
    Type type = value.GetType();

    // Get fieldinfo for this type
    FieldInfo fieldInfo = type.GetField(value.ToString());

    // Get the stringvalue attributes
    EnumInformation [] attribs = fieldInfo.GetCustomAttributes(
        typeof(EnumInformation ), false) as EnumInformation [];

    // Return the first if there was a match.
    return attribs != null && attribs.Length > 0 ? attribs[0].LongDescription : null;
}

public static string GetShortDescription(this Enum value) 
{
    // Get the type
    Type type = value.GetType();

    // Get fieldinfo for this type
    FieldInfo fieldInfo = type.GetField(value.ToString());

    // Get the stringvalue attributes
    EnumInformation [] attribs = fieldInfo.GetCustomAttributes(
        typeof(EnumInformation ), false) as EnumInformation [];

    // Return the first if there was a match.
    return attribs != null && attribs.Length > 0 ? attribs[0].ShortDescription : null;
}

你的Enum看起来像这样

public enum MyEnum
{
    [EnumInformation(LongDescription="This is the Number 1", ShortDescription= "1")]
    One,
    [EnumInformation(LongDescription = "This is the Number Two", ShortDescription = "2")]
    Two
}

你可以这样使用它

MyEnum test1 = MyEnum.One;

Console.WriteLine("test1.GetLongDescription = {0}", test1.GetLongDescription());
Console.WriteLine("test1.GetShortDescription = {0}", test1.GetShortDescription());

它输出

test1.GetLongDescription =这是数字1

test1.GetShortDescription = 1

您实际上可以向属性添加属性以获取各种信息。 然后你可以支持你正在寻找的本地化。


“长描述”是什么意思? 我有一个库,允许您将Description属性附加到枚举值并获取它们:

public enum Foo
{
    [Description("This is a really nice piece of text")]
    FirstValue,
    [Description("Short but sweet")]
    Second,
}

如果您正在讨论XML文档,那是另一回事 - 它不会内置到二进制文件中,所以您必须构建/发布XML,然后在执行时取回它。 这是可行的,但我没有代码来执行它......


我倾向于远离这种做法。 如果你仔细想想,它会将你的代码的逻辑与你输入代码的方式绑定在一起。 使用switch语句,资源文件,数据库等会好得多......

我经过惨痛的教训才学到这个。 我有一个应用程序,我们最终决定混淆以帮助保护我们的代码。 正如你可以想象的那样,由于在混淆过程中枚举被重命名,我们的二进制文件以我们想要的方式停止工作。

链接地址: http://www.djcxy.com/p/91541.html

上一篇: Can you access a long description for a specific enum value

下一篇: C# vs Java Enum (for those new to C#)