Switch в С# и "ожидается постоянное значение"
Почему компилятор говорит, что "требуется постоянное значение" для первого случая... второй случай отлично работает...
switch (definingGroup)
{
case Properties.Settings.Default.OU_HomeOffice:
//do something
break;
case "OU=Home Office":
//do something
break;
default:
break;
}
тоже пробовал...
switch (definingGroup)
{
case Properties.Settings.Default.OU_HomeOffice.ToString():
//do something
break;
case "OU=Home Office":
//do something
break;
default:
break;
}
... такая же ошибка
Здесь код Properties.Setting
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("OU=Home Office")]
public string OU_HomeOffice {
get {
return ((string)(this["OU_HomeOffice"]));
}
}
Ответы
Ответ 1
Properties.Settings.Default.OU_HomeOffice
не является постоянной строкой - что-то известно во время компиляции. Оператор switch С# требует, чтобы каждый случай был константой времени компиляции.
(Помимо всего прочего, это единственный способ узнать, что дубликатов не будет.)
Подробнее см. раздел 8.7.2 спецификации С# 3.0.
Ответ 2
Это связано с тем, что значение не может быть определено во время компиляции (поскольку оно выходит из настройки конфигурации). Вам нужно указать значения, которые известны на момент компиляции кода (константы).
Ответ 3
В основном это говорит о том, что он должен гарантировать, что значение для каждого случая не изменится во время выполнения. Жесткая кодировка вашей строки в строке, как и во втором случае, гарантирует, что значение не изменится во время выполнения (как объявит переменную 'const' и присвоит ей стробированную строку как значение).
Первый случай - сделать вызов в свойство класса, значение которого не известно компилятору во время компиляции.
Если у вас есть некоторые значения "конфигурации", которые в значительной степени делают постоянными в вашем приложении, вы можете подумать о создании класса, в котором вы можете жестко закодировать эти значения, являются константными переменными и использовать их в своих операторах switch. В противном случае вы, вероятно, будете придерживаться того, чтобы использовать инструкции if/else if.