How can I use enum in C# for storing string constants?
Enum constants can only be of ordinal types (int
by default), so you can't have string constants in enums.
When I want something like a "string-based enum" I create a class to hold the constants like you did, except I make it a static class to prevent both unwanted instantiation and unwanted subclassing.
But if you don't want to use string as the type in method signatures and you prefer a safer, more restrictive type (like Operation
), you can use the safe enum pattern:
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; }
}
You could do this using DescriptionAttribute
, but then you'd have to write code to get the string out of the attribute.
public enum YourEnum
{
[Description("YourName1")]
Name1,
[Description("YourName2")]
Name2
}
The whole point of enums is to be ordinal constants.
However, you can achieve what you want by using an extension method:
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();