Могут ли перечисления содержать строки?

Как я могу объявить enum, который имеет строки для значений?

private enum breakout {            
    page = "String1",
    column = "String2",
    pagenames = "String3",
    row = "String4"
}

Ответ 1

Как говорили другие, вы не можете.

Вы можете делать статические классы следующим образом:

internal static class Breakout {
    public static readonly string page="String1";
    public static readonly string column="String2";
    public static readonly string pagenames="String3";
    public static readonly string row="String4";

    // Or you could initialize in static constructor
    static Breakout() {
        //row = string.Format("String{0}", 4);
    }
}

или

internal static class Breakout {
    public const string page="String1";
    public const string column="String2";
    public const string pagenames="String3";
    public const string row="String4";
}

Используя readonly, вы можете фактически присвоить значение в статическом конструкторе. При использовании const он должен быть фиксированной строкой.

Или присвойте DescriptionAttribute значения перечисления, например здесь.

Ответ 2

Нет, они не могут. Они ограничены числовыми значениями базового типа перечисления.

Однако вы можете получить подобное поведение с помощью вспомогательного метода

public static string GetStringVersion(breakout value) {
  switch (value) {
    case breakout.page: return "String1";
    case breakout.column: return "String2";
    case breakout.pagenames: return "String3";
    case breakout.row: return "String4";
    default: return "Bad enum value";
  }
}

Ответ 3

Нет, но вы можете получить значение перечисления в виде строки:

Метод Enum.ToString

private enum Breakout {     
  page,
  column,
  pagenames,
  row
}

Breakout b = Breakout.page;
String s = b.ToString(); // "page"

Ответ 4

Перечисление по умолчанию имеет целое число в качестве базового типа, которое также указано здесь в msdn.

Ответ 5

Может быть, Enum.GetName()/Enum.GetNames() может быть вам полезен.

Ответ 6

Вы можете создать словарь перечислений.

public enum OrderType
{
    ASC,
    DESC
}

public class MyClass
{
    private Dictionary<OrderType, string> MyDictionary= new Dictionary<OrderType, string>()
                                                     {
                                                         {OrderType.ASC, ""},
                                                         {OrderType.DESC, ""},
                                                     };
}