更改枚举显示

时间:2013-06-21 03:55:46

标签: c# oop coding-style enums

我怎么能有一个c#枚举,如果我选择字符串它返回一个不同的字符串,就像在java中它可以通过

完成
public enum sample{
    some, other, things;

    public string toString(){
        switch(this){
          case some: return "you choose some";
          default: break;
        }
    }
}

Console.writeln(sample.some)将输出:

you choose some

我只想让我的枚举在我尝试调用它们时返回不同的字符串。

4 个答案:

答案 0 :(得分:12)

据我所知,这是不可能的。但是,您可以编写一个扩展方法来获取其他字符串:

public static class EnumExtensions
{
    public static string ToSampleString(this SampleEnum enum)
    {
         switch(enum)
         {
             case SampleEnum.Value1 : return "Foo";
             etc.
         }
    }
}

现在,只需在ToSampleString

的实例上调用此新SampleEnum即可
mySampleEnum.ToSampleString();

如果您不熟悉C#中的扩展程序,请阅读更多here

另一种选择是在每个Description值之上使用enum属性,如here所述。

答案 1 :(得分:4)

我会通过创建一个属性来装饰它用它描述和装饰枚举值。

e.g。

public enum Rate
{
   [Description("Flat Rate")]
   Flat,
   [Description("Time and Materials")]
   TM
}

然后使用GetCustomAttributes来读取/显示值。 http://msdn.microsoft.com/en-us/library/system.attribute.getcustomattributes.aspx

@CodeCamper对于迟到的回复感到抱歉,但这里有一些示例代码来阅读DescriptionAttribute:

扩展方法:

public static class EnumExtensions
{
    public static string Description<T>(this T t)
    {
        var descriptionAttribute = (DescriptionAttribute) typeof (T).GetMember(t.ToString())
                                   .First().GetCustomAttribute(typeof (DescriptionAttribute));

        return descriptionAttribute == null ? "" : descriptionAttribute.Description;
    }
}

用法:

Rate currentRate = Rate.TM;
Console.WriteLine(currentRate.Description());

答案 2 :(得分:3)

你想要一本字典。枚举器枚举(给出一个数字)其值。您希望在提供字符串键时返回字符串值。尝试类似:

Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("some", "you choose some");
dictionary.Add("other", "you choose other");
dictionary.Add("things", "you choose things");

然后这段代码:

string value = dictionary["some"];
Console.writeln(value);

将返回“你选择一些”

答案 3 :(得分:0)

如果您只想将Enum作为字符串,可以使用此方法:

Enum.GetName(typeof(sample), value);

此方法将返回Enum的名称而不是int。