В C # я должен использовать string.Empty или String.Empty или "" для инициализации строки? - PullRequest
670 голосов
/ 04 ноября 2008

В C # я хочу инициализировать строковое значение пустой строкой.

Как мне это сделать? Каков правильный путь и почему?

string willi = string.Empty;

или

string willi = String.Empty;

или

string willi = "";

или что?

Ответы [ 29 ]

3 голосов
/ 04 ноября 2008

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

[EDIT]

Кроме того, вы можете всегда использовать string или String для согласованности, но это только я.

3 голосов
/ 18 мая 2017

Я лично был свидетелем "", приводящего к (незначительным) проблемам дважды. Однажды это произошло из-за ошибки начинающего разработчика, плохо знакомого с командным программированием, а другая была простой опечаткой, но факт использовал string.Empty избежал бы обеих проблем.

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

Если вы введете string.EMpty или Strng.Empty, компилятор сообщит вам, что вы сделали это неправильно. Немедленно. Он просто не скомпилируется. Как разработчик, вы указываете конкретное намерение, что компилятор (или другой разработчик) не может каким-либо образом неверно истолковать, а если вы сделаете это неправильно, вы не сможете создать ошибку.

Если вы наберете «», когда имеете в виду «» или наоборот, компилятор с радостью выполнит то, что вы сказали. Другой разработчик может или не сможет определить ваши конкретные намерения. Ошибка создана.

Задолго до строки. Я использовал стандартную библиотеку, определяющую константу EMPTY_STRING. Мы по-прежнему используем эту константу в операторах case, где string.Empty не допускается.

По возможности, включите компилятор для вас и исключите возможность человеческой ошибки, какой бы маленькой она ни была. ИМО, это превосходит «читабельность», как цитировали другие.

Конкретность и время компиляции. Это то, что на ужин.

2 голосов
/ 04 ноября 2008

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

2 голосов
/ 10 января 2017

Я просто смотрел какой-то код, и этот вопрос всплыл у меня в голове, который я прочитал некоторое время назад. Это, безусловно, вопрос читабельности.

Рассмотрим следующий код C # ...

(customer == null) ? "" : customer.Name

против

(customer == null) ? string.empty : customer.Name

Лично я нахожу последние менее двусмысленными и легче для чтения.

Как отмечают другие, фактические различия незначительны.

2 голосов
/ 24 мая 2017

Я использую "", потому что в моем коде он будет ярко окрашен в желтый цвет ... по какой-то причине String.Empty полностью белый в моей теме кода Visual Studio. И я считаю, что это имеет для меня самое большое значение.

1 голос
/ 04 ноября 2008

Я думаю, что второе "правильно", но, честно говоря, я не думаю, что это будет иметь значение. Компилятор должен быть достаточно умен, чтобы компилировать любой из них в один и тот же байт-код. Я использую "" сам.

1 голос
/ 16 ноября 2011

Вкл. http://blogs.msdn.com/b/brada/archive/2003/04/22/49997.aspx:

Как предполагает Дэвид, разница между String.Empty и "" довольно мала, но есть разница. "" фактически создает объект, он, вероятно, будет извлечен из внутреннего пула строк, но все же ... в то время как String.Empty не создает объекта ... поэтому, если вы действительно ищете в конечном счете эффективность использования памяти, я предлагаю 1010 *. Тем не менее, вы должны помнить, что разница настолько незначительна, что вы никогда не увидите ее в своем коде ...
Что касается System.String.Empty или string.Empty или String.Empty ... у меня низкий уровень ухода; -)

1 голос
/ 10 декабря 2017

Пустая строка похожа на пустое множество, просто имя, которое все используют для вызова "". Также в формальных языках строки, созданные из алфавита с нулевой длиной, называются пустой строкой. И set, и string имеют специальный символ для этого. Пустая строка: ε и пустое множество: ∅. Если вы хотите поговорить об этой строке нулевой длины, вы назовете ее пустой строкой, чтобы все точно знали, на что вы ссылаетесь. Теперь, если вы называете это пустой строкой, почему бы не использовать string.Empty в коде, это показывает, что намерение явно. Недостатком является то, что он не является константой и поэтому не доступен везде, как в атрибутах. (Это не константа по некоторым техническим причинам, см. Справочный источник.)

0 голосов
/ 05 ноября 2008

Хотя разница очень, ОЧЕНЬ мала, разница все еще существует.

1) "" создает объект, а String.Empty - нет. Но этот объект будет создан один раз, и на него позже будет ссылаться из пула строк, если в коде есть еще одна "".

2) Строка и строка одинаковы, но я бы порекомендовал использовать String.Empty (а также String.Format, String.Copy и т. Д.), Поскольку точечная нотация указывает на класс, а не на оператора, и имеет класс, начинающийся с заглавной буквы буква соответствует стандартам кодирования C #.

...