如何使用空格枚举值?

时间:2013-03-17 06:43:33

标签: c# .net vb.net enums

如何使用.NET中的枚举来实现以下功能?我想对每个包含空格的值进行描述。

public enum PersonGender
    {
        Unknown = 0,
        Male = 1,
        Female = 2,
        Intersex = 3,
        Indeterminate = 3,
        Non Stated = 9,
        Inadequately Described = 9
    }

我希望每次使用此类型的值时都能选择是使用描述还是整数。

3 个答案:

答案 0 :(得分:40)

不,这是不可能的,但您可以将属性附加到enum成员。 EnumMemberAttribute的设计完全符合您所描述的目的。

public enum PersonGender
{
    Unknown = 0,
    Male = 1,
    Female = 2,
    Intersex = 3,
    Indeterminate = 3,

    [EnumMember(Value = "Not Stated")]
    NonStated = 9,

    [EnumMember(Value = "Inadequately Described")]
    InadequatelyDescribed = 9
}

有关如何使用EnumMemberAttribute将字符串转换为enum值的详细信息,请参阅this thread

答案 1 :(得分:5)

这很容易。为您的字符串创建一个扩展方法,该方法根据您的编码约定返回格式化字符串。你可以在很多地方使用它,而不仅仅是在这里。这个适用于camelCase和TitleCase。

    public static String ToLabelFormat(this String s)
    {
        var newStr = Regex.Replace(s, "(?<=[A-Z])(?=[A-Z][a-z])", " ");
        newStr = Regex.Replace(newStr, "(?<=[^A-Z])(?=[A-Z])", " ");
        newStr = Regex.Replace(newStr, "(?<=[A-Za-z])(?=[^A-Za-z])", " ");

        return newStr;
    }

答案 2 :(得分:1)

var assembly = Assembly.LoadFrom("ResourcesLib.DLL");            
var resourceManager =
new ResourceManager("ResourcesLib.EnumDescriptions", assembly);                        

var lst = Enum.GetValues(typeof(PersonGender)).Cast<PersonGender>().ToList();
foreach (var gender in lst)
{
  Console.WriteLine(gender); // Name
  Console.WriteLine((int)gender); //Int Value
  Console.WriteLine(resourceManager.GetString(gender.ToString()));//localized Resorce
}          

因此空间可能存在于本地化资源中......