Я заметил нечто особенное в Visual Studio. Сначала попробуйте ввести это (C #) где-нибудь в функции:
class Foo
{
public void Bar()
{
string s;
int i = s.Length;
}
}
Теперь сразу отметим s
в s.Length
как ошибку, сказав "Use of unassigned local variable 's'
". С другой стороны, попробуйте этот код:
class Foo
{
private string s;
public void Bar()
{
int i = s.Length;
}
}
Он скомпилирует и подчеркнет s
в private string s
предупреждением, говорящим "Field 'Foo.s' is never assigned to, and will always have its default value null
".
Теперь, если VS такой умный и знает, что s всегда будет нулевым, почему не ошибка получить его длину во втором примере? Моим первоначальным предположением было: «Это дает ошибку компиляции, только если компилятор просто не может завершить свою работу. Поскольку код технически выполняется до тех пор, пока вы никогда не вызываете Bar (), это всего лишь предупреждение». За исключением того, что объяснение недействительно в первом примере. Вы по-прежнему можете запускать код без ошибок, если вы никогда не вызываете Bar (). Так что же дает? Просто недосмотр или я что-то упустил?