Есть ли необходимость установить строковую переменную-член класса в ""? - PullRequest
3 голосов
/ 30 июня 2010

Есть ли необходимость установить строковую переменную-член класса в ""? Это будет null, если вы не сделаете это?

Ответы [ 6 ]

19 голосов
/ 02 июля 2010

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

Лучшая ссылка - Значения по умолчаниюТаблица (помните, что по умолчанию для всех ссылочных типов установлено значение null), но некоторые примеры ниже дают подходящее представление:

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") */

Для получения дополнительной информации о строках см. эту замечательную статью .

И не забудьте Таблицу значений по умолчанию.

6 голосов
/ 30 июня 2010

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

6 голосов
/ 30 июня 2010

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

1 голос
/ 09 июля 2010

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

string s = GetSomeString();

if(String.IsNullOrEmpty(s)) {
//do whatever here
}
1 голос
/ 09 июля 2010
  • Есть ли необходимость установить строковую переменную-член класса в ""?

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

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

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

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

1 голос
/ 06 июля 2010

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

"Есть ли необходимость установить строковую переменную-член класса в" "?"

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

Здесь можно найти отличное понимание .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...