2010-06-30 4 views
3

Нужно ли устанавливать переменную члена строки класса в ""? Будет ли это null, если вы этого не сделаете?Нужно ли устанавливать переменную-строку члена класса в ""?

+0

Проверить это также http://stackoverflow.com/questions/265875/default-string-initialization-null-or-empty –

+0

мне нужен какой-то способ, чтобы разорвать связь между Jerod и jean27. – CJ7

+1

принять ответ Джерода, он ответил первым ... – Hinek

ответ

19

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

Лучшим справочником является Default Values Table (помните, все ссылочные типы устанавливаются в нуль по умолчанию), но некоторые примеры ниже дают приличную идею:

string a = default(string); // null 
String b = default(String); // null 
int c = default(int); // 0 
int? d = default(int?); // null 
Object e = default(object); // null 
double f = default(double); // 0.0 

// an instance of someStruct with fields set to default(theirType) 
someStruct g = default(someStruct); 

Строка рода, кажется, тип значения потому, что он кажется таким примитивным. Кроме того, это неизменное значение, что вы никогда не можете изменить строку, вместо этого вы просто устанавливаете строковые символы для указания на новые строки «значения» (которые сами являются ссылками), создавая впечатление, что строка является типом значения.

Например:

string a = "boo"; 
/* Mem contains reference to "boo" and symbol 'a' => reference("boo") */ 

a = "gah"; 
/* Mem contains references to "boo" and "gah". symbol 'a' -> reference("gah") */ 

Для получения дополнительной информации о строках см this great article.

И не забудьте the Default Values Table.

6

Да, значение по умолчанию для строки равно null.

6

Значение по умолчанию для строки равно null.

1

Это уже задавали и ответил много раз. И предыдущие ответчики здесь сразу перешли к вашему второму вопросу, не отвечая на ваш первый вопрос, который, как я чувствую, более важен, поскольку простой поиск в Google сказал бы вам, что такое по умолчанию.

«Нужно ли устанавливать переменную-член строки класса в« "?"

Это зависит от того, что вы подразумеваете под «необходимостью». Если вы читаете, тогда да, может быть очень нужно. Это будет личное решение, требующее принятия вами единодушного решения. Я лично считаю вещи более читаемыми, если переменным присваивается значение по умолчанию в соответствующем месте. Если вы сделаете это в нужном месте, компилятор будет (может) оптимизировать его, так что это действительно сводится к читабельности.

Некоторое превосходное понимание можно найти here.

+4

И если вам «нужно» установить строки в '' '', чтобы быть ясными, то вы также можете следовать советам StyleCop и вместо этого использовать 'string.Empty'. –

+0

Я не сторонник между «» и «нуль», только между ничего и ничего. Если переменная никогда не инициализируется, она требует очень короткой, но по своей сути прерывистой паузы, чтобы думать о том, что по умолчанию, когда переменная не установлена. Устранение этих перерывов (неинициализированные переменные - всего лишь один пример, а второстепенный - это одна из сущностей удобочитаемости, на мой взгляд. – sliderhouserules

1
  • Нужно ли устанавливать переменную-член строки класса в ""?

Не, если ваши методы класса знают, что значение по умолчанию переменной-члена строка null и иметь дело с ним соответствующим образом (то есть, проверить его на нуль перед использованием его значения).

В противном случае, вероятно, это хорошая идея инициализировать его для некоторого ненулевого значения. Это может упростить ваши методы, если они могут предположить, что переменная имеет ненулевое значение во все времена.

  • Будет ли это null, если вы не сделаете это?

Да, переменная члена ссылочного типа (например, string) без явного значения инициализатора инициализируется null по умолчанию, когда объект класса построен.

1

Кроме того, если ваше приложение не проводит различие между пустым и пустым "", то при проверке значения используйте String.IsNullOrEmpty(). Если вы также обрабатываете пробелы так же, как и пустые, то используйте новый String.IsNullOrWhiteSpace(). null, "" и "". Любые символы без пробелов будут ложными.

string s = GetSomeString(); 

if(String.IsNullOrEmpty(s)) { 
//do whatever here 
} 
Смежные вопросы