c#: как использовать перечисление для хранения строковых констант? [дубликат]
Возможные Дубликаты:
перечисление со строки
можно иметь строковые константы в перечислении как
enum{name1="hmmm" name2="bdidwe"}
если это не так, что это лучший способ, чтобы сделать это?
я попробовал его не работает для строки, так что прямо сейчас я группирую все связанные constnats в одном классе, как
class operation
{
public const string name1="hmmm";
public const string name2="bdidwe"
}
4 ответа:
константы перечисления могут быть только порядковых типов (
int
по умолчанию), так что вы не можете иметь строковые константы перечисления.когда я хочу что-то вроде "string-based enum", я создаю класс для хранения констант, как и вы, за исключением того, что я делаю его статическим классом, чтобы предотвратить как нежелательные экземпляры, так и нежелательные подклассы.
но если вы не хотите использовать строку в качестве типа в сигнатурах метода, и вы предпочитаете более безопасный, более ограничительный тип (например,
Operation
), вы можете использовать безопасный шаблон перечисления:public sealed class Operation { public static readonly Operation Name1 = new Operation("Name1"); public static readonly Operation Name2 = new Operation("Name2"); private Operation(string value) { Value = value; } public string Value { get; private set; } }
вы могли бы сделать это с помощью
DescriptionAttribute
, но тогда вам придется написать код, чтобы получить строку из атрибутов.public enum YourEnum { [Description("YourName1")] Name1, [Description("YourName2")] Name2 }
весь смысл перечислений должен быть порядковый номер константы.
Однако вы можете достичь того, что хотите, используя метод расширения:enum Operation { name1, name2 } static class OperationTextExtender { public static String AsText(this Operation operation) { switch(operation) { case Operation.name1: return "hmmm"; case Operation.name2: return "bdidwe"; ... } } } ... var test1 = Operation.name1; var test2 = test1.AsText();