Так что это назначено, но не одновременно ????
Я понимаю, что эти сообщения компилятора сбивают с толку, и извиняюсь за это.
Сообщения об ошибках, которые имеют отношение к определенному назначению, и предупреждения, которые идентифицируют, возможно, неправильный код, были добавлены по частям, со временем и без solid плана, чтобы поддерживать их согласованность.
Когда я был в команде компиляторов, я сделал несколько попыток сделать их более последовательными и понятными, но эта работа, по меньшей мере, имела смешанный успех. Подробное изложение всех этих попыток приведет нас далеко; Я написал несколько статей и ответов о них в прошлом; один из них, который может вас заинтересовать, это эта серия из трех частей .
Простое объяснение состоит в том, что ошибка и предупреждение используют «назначенный» для обозначения двух разных вещей. Сообщение об ошибке:
use of unassigned local variable 'size'
, но это не совсем верно. Он должен сказать что-то вроде «локальной переменной size
определенно не присваивается значение во всех возможных потоках управления до ее чтения».
Если вы посмотрите на свой код, то увидите, что если взята окончательная else
, то size
никогда не записывается, но по этому пути к коду она все равно читается , и это ошибка. Там нет значения для чтения!
Затем вы удаляете read , и ошибка исчезает, потому что сбой при инициализации переменной, которая никогда не читается, не является ошибкой . Тем не менее, код теперь выглядит неправильно; вы работали до пытались инициализировать size
, а затем никогда не использовали эту работу, так что это, вероятно, ошибка. Предупреждение:
The variable 'size' is assigned but its value is never used.
Использует «назначенное» для значения »в какой-то момент в этом методе вы присвоили значение этой локальной переменной, но затем вы никогда не читали из нее, так почему вы присвоили это значение ? "
Это предупреждение встречается не так часто; компилятор обычно подавляет это. Почему? Поскольку этот шаблон чрезвычайно распространен:
int dummy = Blah();
// Note, dummy is never read, but I want to observe it in the debugger.
Но в вашем коде компилятор знает, что вы, вероятно, не используете size
для целей отладки; вы только присвоили ей константы . Здесь нет никакой тайны о том, какова ее ценность; Вы можете просто прочитать код и узнать, какое его точное значение будет в каждом потоке управления.
Так вот в чем разница: в ошибке «неназначенный» означает «не определенно назначен в каждом потоке управления» и в предупреждение, «назначенный» означает «назначенный хотя бы один раз».
Понятия не имею, что делать.
Существует два способа продолжить.
Первый метод: сохранить назначения одинаковыми, но избегать пути к коду, в котором отсутствует назначение во время чтения. Например:
else
{
MessageBox.Show("Vul een grootte in!");
return;
}
Теперь нет проблем; единственный путь, по которому size
не назначен возвращается до того, как size
прочитано .
Второй метод: Добавить назначение по всем путям:
else
{
MessageBox.Show("Vul een grootte in!");
size = Animal.Sizes.None;
}
Теперь на каждом пути перед чтением есть назначение.