10

文字列を選択した場合、Javaのように別の文字列を返すac#enumを取得するにはどうすればよいですか

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#をお読みください。

もう 1 つのオプションは、こちらで説明されているように、各値の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 に答える
0

Enum を文字列として取得したいだけの場合は、次のメソッドを使用できます。

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

このメソッドは、int ではなく Enum の名前を返します。

于 2013-06-21T04:50:48.553 に答える