Не могли бы вы объяснить мне причину следующей ситуации.
Сегодня я написал код (изменяются только имена переменных):
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 переменнымиошибка "Локальная переменная не может быть инициализирована перед доступом".
Но почему?Единственное, что я сделал, это немного изменил код.И, как я понимаю, логика та же.