2015-11-18 4 views
0

я первоначально имел некоторый условный код вроде этого:Почему строка, назначенная String.Empty, рассматривается как null (C#)?

String _monthYr4; 
. . . 
if (_monthYr4.Length > 0) 

... но когда _monthYr4 не был назначен до условных существ достигли, он взорвался во время выполнения, со старым каштаном, «ссылка на объект не установлен в экземпляр объекта. "

Поэтому я добавил, что я думал, что строковое значение по умолчанию (хотя и пустой), чтобы _monthYr4, как это:

private String _monthYr4 = String.Empty; 

... но она по-прежнему врезался в точно таким же образом. Поэтому я, наконец, сменил условие на это:

if (null != _monthYr4) 

... и это отлично работает. Но почему? Должно ли _monthYr4 быть ненулевым, после присвоения ему String.Empty?

На стороне записки, прежде чем я назначен String.Empty к _monthYr4, это выглядело так:

String _monthYr4; 

... но после того, как я назначил String.Empty к _monthYr4, Visual Studio (или Resharper, может быть, ?) автоматически добавили «частную» часть, так что это:

private String _monthYr4 = String.Empty; 

... но я не знаю почему.

+3

Вы уверены, что код перед условием не устанавливает вашу переменную в нуль? – esskar

+4

'String.Empty' является эквивалентом' '' '. Там должно быть что-то актуальное, что вы не показываете нам. –

+4

Это не должно терпеть неудачу. Очистите/восстановите свой проект. перезапустите визуальную студию, это 'String _monthYr4 = String.Empty; Console.WriteLine (_monthYr4.Length); 'никогда не должен терпеть неудачу. – Habib

ответ

1

Вероятно, что-то присваивает значение null этой переменной позже. Используйте ReSharper для поиска всех ссылок (Shift-F12) _monthYr4 и убедитесь, что все обращения к записи не могут назначить значение null.