Подтвердить что ты не робот

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"]));
    }
}
4b9b3361

Ответ 1

Properties.Settings.Default.OU_HomeOffice не является постоянной строкой - что-то известно во время компиляции. Оператор switch С# требует, чтобы каждый случай был константой времени компиляции.

(Помимо всего прочего, это единственный способ узнать, что дубликатов не будет.)

Подробнее см. раздел 8.7.2 спецификации С# 3.0.

Ответ 2

Это связано с тем, что значение не может быть определено во время компиляции (поскольку оно выходит из настройки конфигурации). Вам нужно указать значения, которые известны на момент компиляции кода (константы).

Ответ 3

В основном это говорит о том, что он должен гарантировать, что значение для каждого случая не изменится во время выполнения. Жесткая кодировка вашей строки в строке, как и во втором случае, гарантирует, что значение не изменится во время выполнения (как объявит переменную 'const' и присвоит ей стробированную строку как значение).

Первый случай - сделать вызов в свойство класса, значение которого не известно компилятору во время компиляции.

Если у вас есть некоторые значения "конфигурации", которые в значительной степени делают постоянными в вашем приложении, вы можете подумать о создании класса, в котором вы можете жестко закодировать эти значения, являются константными переменными и использовать их в своих операторах switch. В противном случае вы, вероятно, будете придерживаться того, чтобы использовать инструкции if/else if.