Могут ли перечисления содержать строки?
Как я могу объявить 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, ""},
};
}