Объявление переменной в операторе переключения C# [дубликат]

116
задан Peter Mortensen 4 May 2014 в 19:40
поделиться

6 ответов

Я полагаю, что это имеет отношение к полному объему переменной, это - объем блочного уровня, который определяется на уровне коммутатора.

Лично, если Вы устанавливаете значение к чему-то в переключателе в Вашем примере для него для реального имения какую-либо выгоду, Вы хотели бы объявить его вне переключателя так или иначе.

44
ответ дан Otiel 24 November 2019 в 02:12
поделиться

Если Вы хотите переменную, ограниченную по объему к особому случаю, просто включаете случай в его собственный блок:

switch (Type)
{
    case Type.A:
    {
        string variable = "x";
        /* Do other stuff with variable */
    }
    break;

    case Type.B:
    {
        string variable = "y";
        /* Do other stuff with variable */
    }
    break;
}
214
ответ дан Peter Mortensen 24 November 2019 в 02:12
поделиться

Да, объемом является блок целостного коммутатора - к сожалению, IMO. Можно всегда добавлять фигурные скобки в единственном случае, однако, для создания меньшего объема. Что касается того, создаются ли они/выделяются - стековый фрейм имеет достаточно пространства для всех локальных переменных в методе (не принимающий во внимание сложности полученных переменных). Это не похоже на то пространство, выделяется во время осуществления метода.

33
ответ дан Jon Skeet 24 November 2019 в 02:12
поделиться

Поскольку их объем в блоке переключателя. Спецификация языка C# указывает следующее:

объемом локальной переменной или постоянный объявленный в блоке переключателя является блок переключателя.

11
ответ дан Jeff B 24 November 2019 в 02:12
поделиться

Переменные действительно совместно используют объем в компиляторе C#. Однако объем не существует таким же образом в CIL. Что касается фактического создания / инициализация... модель памяти.NET позволяет компилятору переместиться, чтения / пишет немного, пока простые правила сопровождаются, если переменная не отмечена как энергозависимый .

0
ответ дан Peter Mortensen 24 November 2019 в 02:12
поделиться

Инициализация происходит в случае, но объявление эффективно сделано во главе объема. (Psuedo-код)

switch (Type)
{
string variable;

    case Type.A:
            variable = "x";
                break;
    case Type.B:
            variable = "y";
                break;
}
-3
ответ дан James Curran 24 November 2019 в 02:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: