Объясните, пожалуйста, причину такой ситуации.
Сегодня я написал код (изменены только имена переменных):
private void Foo()
{
int firstInteger, secondInteger;
const string firstStringValue = "1", secondStringValue = "2";
if (!string.IsNullOrWhiteSpace(firstStringValue) && int.TryParse(firstStringValue, out firstInteger) &&
!string.IsNullOrWhiteSpace(secondStringValue) && int.TryParse(secondStringValue, out secondInteger))
{
// Using firstInteger and secondInteger here
firstInteger++;
secondInteger++;
}
}
Все было хорошо, пока я не решил переместить условие if в переменную:
private void Foo()
{
int firstInteger, secondInteger;
const string firstStringValue = "1", secondStringValue = "2";
bool firstIntegerAndSecondIntegerAreSpecified =
!string.IsNullOrWhiteSpace(firstStringValue) && int.TryParse(firstStringValue, out firstInteger) &&
!string.IsNullOrWhiteSpace(secondStringValue) && int.TryParse(secondStringValue, out secondInteger);
if (firstIntegerAndSecondIntegerAreSpecified)
{
// Use firstInteger and secondInteger here
firstInteger++;
secondInteger++;
}
}
Теперь компилятор подчеркивает переменные firstInteger и secondInteger с ошибкой " Локальная переменная может быть не инициализирована перед доступом ».
Но почему? Единственное, что я сделал, это немного переделал код. И, как мне кажется, логика та же.