Который я должен использовать для пустой строки и почему? [дубликат]

6
задан Community 23 May 2017 в 12:22
поделиться

8 ответов

String.Empty - это то, что обычно рекомендуется.

Почему? Потому что он передает смысл, вы прямо говорите, что хотите, чтобы строка была пустой.

Кроме того, "" создает строковый объект (этот объект будет повторно использоваться во всех приложениях, поскольку строки в .NET interned), String.Empty не создает новый объект. См. здесь.

6
ответ дан 8 December 2019 в 05:53
поделиться

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

Технически оба идентичны и приводят к одному и тому же коду. String.Empty представляет собой экземпляр интернированной пустой строки (""). А поскольку все строковые константы в коде автоматически интернируются, "" представляет собой точно такой же экземпляр пустой строки (Обновление: внутри сборки, см. Обновление ниже).


И, кстати, я использую "". Он короткий, понятный и читаемый.

String.Empty полезен в универсальном коде, использующем отражение и т. Д. Если вам все равно, какой у вас класс, просто хотите получить пустое значение, например, для инициализация со значением по умолчанию.


Обновление: Похоже, не все так просто. В одном домене приложения может быть много экземпляров интернированной строки. И поведение зависит от версии фреймворка. Для получения дополнительной информации см. Эрика Липперта Интернирование строк и String.Empty , а также примечания в Справочник по методу String.Intern .

Но вторая ссылка предполагает, что, начиная с 3.5 SP1, снова есть один интернированный "", как и должно быть в первую очередь. Так зачем возиться с этим при программировании? Для завершения проекта требуется время. Учитывайте улучшения в компиляторах, фреймворках и инструментах ... И не оптимизируйте преждевременно. Важнее быть читаемым, последовательным и правильным.

6
ответ дан 8 December 2019 в 05:53
поделиться

Лучше использовать String.Empty вместо "".

myString = “” creates a new instance of type String.

myString = String.Empty does not. 

РЕДАКТИРОВАТЬ

Заблуждение состоит в том, что использование пустой строки в кавычках всегда создает новый объект. Почему я так говорю? Обратите внимание, что .NET стажирует свои строки, поэтому будущие экземпляры будут извлекать ту же неизменяемую строку из внутреннего пула, и любое снижение производительности будет незначительным. В информатике интернирование строк - это метод хранения только одной копии каждого отдельного строкового значения, которое должно быть неизменным. Интернирование строк заставляет некоторые задачи обработки строк занимать больше времени или пространства за счет того, что требуется больше времени при создании или интернировании строки. Отдельные значения хранятся в внутреннем пуле строк.

Единственная копия каждой строки называется ее «интерном» и обычно просматривается методом класса строки. Это означает, что это нормально, если «» создает объект, а String.Empty - нет. Но этот объект будет создан один раз и на него будет ссылаться из пула строк позже, если у вас есть еще один "" в коде.

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

Разница между String.Empty и "" (двойные кавычки)

String.Empty vs "" vs String. IsNullOrEmpty

5
ответ дан 8 December 2019 в 05:53
поделиться

Хорошую статью, объясняющую различия между "" и string.Empty, можно найти здесь.

Из статьи:

"Здесь мы подробно рассмотрели string.Empty, сначала посмотрев, как использовать его в своей программе, а затем рассмотрели почему он не работает в переключателях. Кроме того, мы обнаружили, что она предоставляет меньше информации компилятору C# компилятору о вашем коде, чем сама константа. Наконец, мы увидели, что компилятор C# может полностью исключить определенные инструкции, которые используют "", но не те, которые используют string.Empty"

2
ответ дан 8 December 2019 в 05:53
поделиться

Это не имеет значения, нет никакой разницы, как описано в статье MSDN.

Поле String.Empty

Значением этого поля является строка нулевой длины, "".

2
ответ дан 8 December 2019 в 05:53
поделиться

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

1
ответ дан 8 December 2019 в 05:53
поделиться

Лучше использовать string.Empty , чем "".

string.Empty более читаемый код, чем "".

лучше использовать string variableName = string.Empty; not string variableName = "";

Примечание: нет создания объекта для "" .Net 3.0 и выше. "" И String.Empty одинаковы.

Но в .Net 2.0 "" создаст новый экземпляр, а не для String.Empty

В C # должен ли я использовать string.Empty или String.Empty или "" для инициализировать строку?

http://www.ecma-international.org/publications/standards/Ecma-334.htm

0
ответ дан 8 December 2019 в 05:53
поделиться

"" и "" выглядят одинаково. если вы не можете поймать пробел внутри "" по ошибке

, то "" может передать String.IsNullOrEmpty () . и получить неожиданный результат.

0
ответ дан 8 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: