Каково различие между Строкой. Пустой и “” (пустая строка)?

277
задан nawfal 28 June 2013 в 20:33
поделиться

7 ответов

В.NET до версии 2.0, "" создает объект, в то время как string.Empty не создает объекта <глоток> касательно , который делает string.Empty более эффективный.

В версии 2.0 и позже.NET, все случаи "" относятся к тому же строковому литералу, что означает "", эквивалентно .Empty, но все еще с такой скоростью, как .Length == 0.

.Length == 0 самая быстрая опция, но .Empty делает для немного более чистого кода.

Посмотрите спецификация.NET для получения дополнительной информации .

284
ответ дан Robert MacLean 23 November 2019 в 02:06
поделиться

Все экземпляры "" являются тем же, интернированный строковый литерал (или они должны быть). Таким образом, Вы действительно не будете бросать новый объект на "кучу" каждый раз, когда Вы используете, "" но просто создание ссылки на то же, интернированный объект. Однако я предпочитаю строку. Пустой. Я думаю, что это делает код более читаемым.

6
ответ дан Jason Jackson 23 November 2019 в 02:06
поделиться

Это просто не имеет значения!

Некоторое прошлое обсуждение этого:

http://www.codinghorror.com/blog/archives/000185.html

http://blogs.msdn.com/brada/archive/2003/04/22/49997.aspx

http://blogs.msdn.com/brada/archive/2003/04/27/50014.aspx

6
ответ дан Cade Roux 23 November 2019 в 02:06
поделиться

Вышеупомянутые ответы технически корректны, но что можно действительно хотеть использовать для лучшей удобочитаемости кода, и наименьшее количество шанса исключения Строка. IsNullOrEmpty (s)

13
ответ дан Eugene Katz 23 November 2019 в 02:06
поделиться

String.Empty только для чтения поле, в то время как "" константа . Это означает, что Вы не можете использовать String.Empty в операторе переключения, потому что это не константа.

35
ответ дан shA.t 23 November 2019 в 02:06
поделиться

Предыдущие ответы были корректны для.NET 1.1 (взгляд во время сообщения, которое они связали: 2003). С.NET 2.0 и позже, нет по существу никакого различия. JIT закончит тем, что сослался на тот же объект на "куче" во всяком случае.

Согласно спецификации C#, разделите 2.4.4.5: http://msdn.microsoft.com/en-us/library/aa691090 (По сравнению с 71) .aspx

Каждый строковый литерал не обязательно приводит к новому строковому экземпляру. Когда два или больше строковых литерала, которые эквивалентны согласно строковому оператору равенства (Раздел 7.9.7) появляются в том же блоке, эти строковые литералы относятся к тому же строковому экземпляру.

Кто-то даже упоминает это в комментариях сообщения Brad Abram

, Таким образом, практический результат "" по сравнению со Строкой. Пустой ноль. JIT поймет его в конце.

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

41
ответ дан Brian R. Bondy 23 November 2019 в 02:06
поделиться

Строка. Пустой не создает объект, тогда как "" делает. Различие, как указано здесь , тривиально, как бы то ни было.

6
ответ дан Esteban Araya 23 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

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