В.NET до версии 2.0, ""
создает объект, в то время как string.Empty
не создает объекта <глоток> касательно глоток>, который делает string.Empty
более эффективный.
В версии 2.0 и позже.NET, все случаи ""
относятся к тому же строковому литералу, что означает ""
, эквивалентно .Empty
, но все еще с такой скоростью, как .Length == 0
.
.Length == 0
самая быстрая опция, но .Empty
делает для немного более чистого кода.
Посмотрите спецификация.NET для получения дополнительной информации .
Все экземпляры "" являются тем же, интернированный строковый литерал (или они должны быть). Таким образом, Вы действительно не будете бросать новый объект на "кучу" каждый раз, когда Вы используете, "" но просто создание ссылки на то же, интернированный объект. Однако я предпочитаю строку. Пустой. Я думаю, что это делает код более читаемым.
Это просто не имеет значения!
Некоторое прошлое обсуждение этого:
http://www.codinghorror.com/blog/archives/000185.html
Вышеупомянутые ответы технически корректны, но что можно действительно хотеть использовать для лучшей удобочитаемости кода, и наименьшее количество шанса исключения Строка. IsNullOrEmpty (s)
String.Empty
только для чтения поле, в то время как ""
константа . Это означает, что Вы не можете использовать String.Empty
в операторе переключения, потому что это не константа.
Предыдущие ответы были корректны для.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 сделать свое задание:)
Строка. Пустой не создает объект, тогда как "" делает. Различие, как указано здесь , тривиально, как бы то ни было.