10

我怎么能有 ac# 枚举,如果我选择字符串它返回一个不同的字符串,就像在 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

4 回答 4

12

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

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

ToSampleString现在,只需在以下实例上调用这个 new SampleEnum

mySampleEnum.ToSampleString();

如果您不熟悉其中的扩展方法,请在此处C#阅读更多内容。

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

于 2013-06-21T04:01:00.490 回答
4

我会通过创建一个属性(例如描述)并用它装饰枚举值来装饰性地做到这一点。

例如

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());
于 2013-06-21T04:58:36.037 回答
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);

将返回“你选择一些”

于 2013-06-21T04:03:01.697 回答
0

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

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

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

于 2013-06-21T04:50:48.553 回答