Я объявляю переменную в C # и не могу использовать ее внутри оператора switch - PullRequest
2 голосов
/ 02 августа 2011

Рассмотрим этот код C #:

string gr = comboBox1.ValueMember;
decimal sum;
try
{
    decimal rite = Convert.ToDecimal(textBox1.Text);
    decimal left = Convert.ToDecimal(textBox2.Text);
}
catch (Exception)
{
    string swr = "Please enter REAL a number, can be with decimals";
    label2.Text = swr;
}

switch (gr)
{
    case "X":
        sum = 12M;
        break;
    case "/":
        break;
    case "*":
        break;
    case "-":
        break;
    default:
        break;
}

answerText.Text = Convert.ToString(sum);

Если я дам десятичному значению sum во время оператора switch, появится всплывающее сообщение об ошибке:

Использование неназначенной локальной переменной 'sum'

Я новичок в C #, так что это может звучать глупо, говоря это. Похоже, я УЖЕ установил значение суммы внутри оператора switch. Я пытался вставить один и тот же sum = 12M; во все остальные операторы, но это, похоже, не помогает.

Кстати, у меня тоже есть проблемы с изменением других переменных вне оператора switch - EX. обряд, слева;

Ответы [ 7 ]

7 голосов
/ 02 августа 2011

Если gr НЕ равно "X" sum не имеет значения.Компилятор предупреждает вас об этом.

3 голосов
/ 02 августа 2011

Только instance variables получают значения по умолчанию, поэтому локальная переменная, такая как sum, должна быть initialized, чтобы ее можно было использовать где-то еще.Поскольку существует вероятность того, что ему ничего не назначат, компилятор выдает ошибку.

1 голос
/ 02 августа 2011

Это связано с тем, что переменная sum назначается только в том случае, если оператор switch соответствует регистру «X». Чтобы исправить это, установите значение по умолчанию, выполнив в верхней части следующее:

decimal sum = 0m;
1 голос
/ 02 августа 2011

Компилятор обнаружил, что существует путь выполнения, в котором переменная не будет назначена.Если gr отличается от X, вы будете использовать неназначенное значение после оператора switch.

Вы можете просто добавить начальное значение в объявление:

decimal sum = 0m;
1 голос
/ 02 августа 2011

Вы устанавливаете значение суммы только для ОДНОГО условия и, следовательно, оно не всегда будет назначаться в тот момент, когда вы пытаетесь преобразовать его в строку. Попробуйте объявить его как decimal sum = 0.0;.

0 голосов
/ 02 августа 2011

При объявлении вы должны использовать это:

decimal sum=0m;

компилятор не гарантирует, что первый случай сохранится, так что сумма может все еще использоваться без присваивания

0 голосов
/ 02 августа 2011

Просто назначьте ему значение по умолчанию при объявлении, и вы не получите ошибку:

decimal sum = 0;
...