Изменить отображение перечисления

Как я могу перечислить С#, если я выбрал строку, он возвращает другую строку, например, в 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

Я просто хочу, чтобы мои перечисления возвращали другую строку, когда я пытаюсь их вызвать.

Ответ 1

Насколько мне известно, это невозможно. Однако вы можете написать метод расширения, который получает другую строку:

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

Теперь просто вызовите этот новый ToSampleString в экземплярах SampleEnum:

mySampleEnum.ToSampleString();

Если вы не знакомы с методами расширения в C#, читайте здесь.

Другой вариант - использовать атрибут Description выше каждого значения enum, как описано здесь.

Ответ 2

Я сделал бы это декоративно, создав атрибут, например. Описание и декорирование значений перечисления.

например.

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());

Ответ 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);

вернет "вы выберете какой-то"

Ответ 4

Если вы просто хотите получить Enum в качестве строки, вы можете использовать этот метод:

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

Этот метод вернет имя Enum вместо int.