用于下拉列表的空间属性的枚举

时间:2011-09-12 15:30:20

标签: c# enums

因为我无法在枚举中占用空间而我正在尝试做类似的事情,但似乎不喜欢它....

public enum EnumState
{
    NewYork,
    NewMexico
}


public EnumState State
    {
        get
        {
            return EnumState ;
        }
        set
        {
            if (EnumState .ToString() == "NewYork".ToString())
            {
                value = "New York".ToString();
                EnumState = value;
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

我已经看到这通常是通过在枚举成员上放置[StringValue("New York")]属性来处理的。快速谷歌搜索返回this blog post,,这有很好的方法。

基本上制作属性类:

public class StringValueAttribute : Attribute {

    public string StringValue { get; protected set; }

    public StringValueAttribute(string value) {
        this.StringValue = value;
    }
}

以及访问它的扩展方法:

   public static string GetStringValue(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
        StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
            typeof(StringValueAttribute), false) as StringValueAttribute[];

        // Return the first if there was a match, or enum value if no match
        return attribs.Length > 0 ? attribs[0].StringValue : value.ToString();
    }

那么你的枚举会是这样的:

public enum EnumState{
  [StringValue("New York")]
  NewYork,
  [StringValue("New Mexico")]
  NewMexico,
}

您可以使用myState.GetStringValue();

答案 1 :(得分:1)

您可以使用此模式:C# String enums

它允许您为枚举中的每个枚举定义自定义字符串名称。