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