Если вы посмотрите на следующий пример:
public void TestLocalValuesAssignment()
{
int valueVariable; // = default(int) suits fine
string refType; // null suits fine as well
try
{
valueVariable = 5;
refType = "test";
}
catch (Exception){}
Console.WriteLine("int value is {0}", valueVariable);
Console.WriteLine("String is {0}", refType);
}
вы могли легко увидеть, что переменные valueVariable
и refType
могли быть не назначены до их использования в Console.WriteLine()
. Об этом нам сообщает компилятор с ошибками:
Error 1 Use of unassigned local variable 'valueVariable'
Error 2 Use of unassigned local variable 'refType'
Это широко распространенный случай, и есть множество ответов о том, как это исправить (возможно исправления с комментариями).
Чего я не могу понять, так это почему такое поведение существует? Чем здесь локальные переменные отличаются от полей класса, где последние получают значение по умолчанию, если не назначены (нулевое значение для ссылочных типов и соответствующее значение по умолчанию для типов значений)? Может быть, есть пример или крайний случай, объясняющий, почему выбрано такое поведение компилятора?