Есть еще одна концептуальная причина.
Все в .NET является объектом.
Переменные являются держателями, которые могут содержать ссылки на объекты или могут указывать на значения.
Почему C# должен позволить вам выводить на консоль (как в вашем примере) переменную, которая не содержит ничего?
Для меня вопрос: не находите ли вы полезным компилятор C#, препятствующий созданию бесполезного кода? Любая помощь всегда полезна с точки зрения предотвращения человеческих ошибок или неправильной логики.
Может быть, я должен верить вам сказать, что, потому что ...
int a;
if(false) { a = 1; }
Console.WriteLine(a);
... не будет компилировать тоже.
Ну, почему компилятор C# должен позволить вам работать со ссылкой на ничего? Любой аргумент будет слабым, так как какая хорошая программа должна писать на консоль ничего? Если вашей программе не нужно печатать, просто не печатайте.
Например, если вы хотите, чтобы сделать это правильно, это должно быть:
int a;
if(false) { a = 1; } else { a = 0; }
Console.WriteLine(a);
«Я хочу, чтобы моя программа, чтобы показать 1, если оно ложно, или 0, если это правда». Но «показать 1, если это ложь, или показать« я не знаю, что », является слабым аргументом.
Это как сказать: «Вы хотите яблоки или пустоту?».
Какой еще результат вы ожидаете? –
Это не имеет ничего общего с примитивами. – SLaks
@jsummers: Вероятно, он ожидает '0'. – SLaks