Я подробно отвечу на ваш вопрос здесь:
https://stackoverflow.com/a/2741281/88656
Вкратце: компилятор обнаруживает, что локальный объект записан, но не прочитан во время прохода анализа потока.Он намеренно подавляет предупреждение, если значение, записанное в local, является непостоянным.String.Empty
не является константой, это поле только для чтения, как ни странно.Но пустой строковый литерал является константой.Вот почему вы видите предупреждение для одного с литералом, но не для поля.
Компилятор полагает, что вы можете присвоить значение выражения непрочитанному локальному в порядкедля облегчения отладки программы .Мы не хотим, чтобы вам приходилось отключать «предупреждения - ошибки» каждый раз, когда вы вводите пояснительную переменную, чтобы помочь в отладке.Тот факт, что в этом случае очевидно, что вы не используете переменную для проверки вывода String.Empty
, теряется компилятором;он не знает, какова семантика ссылки на поле.