Зачем использовать string.Empty over «» при присваивании строковому объекту


13

Я запускаю StyleCop над своим кодом, и одна из рекомендаций SA1122 - использовать string.Empty вместо "" при назначении пустой строки значению.

Мой вопрос: почему это считается лучшей практикой? Или это считается лучшей практикой? Я предполагаю, что между этими двумя утверждениями нет разницы в компиляторе, поэтому я могу только думать, что это удобочитаемость

ТАК вопрос и ответ

Джон Скит ответ на вопрос


5
Я уверен, что об этом спрашивали и отвечали на Stack Overflow - но у меня проблемы с его поиском. Это связано с тем, что он должен создавать экземпляр нового строкового объекта, ""но неstring.Empty
ChrisF

@ChrisF Ааа, не думал, что нужно искать переполнение стека для этого типа вопроса. Я буду иметь гусак.
dreza

1
двойной вопрос о stackoverflow: stackoverflow.com/questions/151472/…
quentin-starin

@ChrisF - это было спрошено на SO. Снова и снова и снова ...
Одед

1
Вот и мы - stackoverflow.com/questions/151472/… - с сентября 2008 года.
ChrisF

Ответы:


12

Одна из веских причин заключается в том, что это дает понять, что это не опечатка или заполнитель, что вы действительно использовать здесь пустую строку.

Я не знаю, считается ли это «лучшей практикой».


7

Я полагаю, что есть две причины: одна для удобства чтения, а вторая - для незначительного повышения производительности.

Читаемость проста: намного быстрее определить, string.Emptyчем "". В поискахstring.Empty также, как правило, будет проще и точнее, чем поиск буквального. Это также проясняет намерение: вы не просто сделали опечатку или забыли что-то закончить, вы действительно хотели пустую строку.

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


7
один щелчок, набирая буквальное "", всегда даст вам ту же самую интернированную версию "", по крайней мере, начиная с .Net 2 и выше.
Квентин Старин

Правильно, в этой статье немного трудно следовать международной статье о MSDN. Это выглядит как "" и string.Empty должны указывать на одну и ту же интернированную строку, но это, кажется, указывает на некоторые различия между версиями времени выполнения .net. Я думаю, что любой строковый литерал, который появляется несколько раз в коде, будет интернирован на втором и последующем использовании, да?
CodexArcanum

4
Также я должен подчеркнуть, что когда я говорю «слабый», я имею в виду супер-крошечный. «Из-за производительности» - не повод переключаться с одного представления на другое, это просто изящная вещь, которую стоит знать о среде выполнения.
CodexArcanum

4
Следует также отметить, что аспект производительности относится только к компиляции. Поскольку оба компилируются до одного и того же IL, производительность во время выполнения должна быть одинаковой.
lzcd

это повышение производительности будет только на компиляции
трещотка урод

4

string.Empty выигрывает в действительно сложном случае, что может привести к некоторой магической ошибке и ее очень сложно отладить:

Если есть пробел нулевой ширины в "".


0

Согласно некоторой документации, которую я нашел, это имеет отношение к тому, что испускает компилятор.

Быстрый поиск показывает: http://stylecop.soyuz5.com/SA1122.html

Почему это подано в «Правилах читабельности» с этим описанием, является загадкой.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.