Навіщо використовувати string.Опустіть над "" при призначенні об’єкта рядка


14

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

Моє запитання, чому це вважається найкращою практикою. Або це вважається найкращою практикою? Я припускаю, що між двома твердженнями немає різниці у компіляторі, тому я можу лише думати, що це річ читабельності?

Так питання та відповідь

Джон Скіт відповідь на питання


5
Я впевнений, що про це запитали і відповіли на Stack Overflow - але я маю проблеми знайти його. Це пов'язано з тим, що він повинен створити новий об'єкт рядка для, ""але ніstring.Empty
ChrisF

@ChrisF А-а, не думав шукати переповнення стека для такого типу питань. У мене буде ґендер.
dreza

1
Dup питання на StackOverflow: stackoverflow.com/questions/151472 / ...
Квентін-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
Слід також зазначити, що аспект продуктивності стосується лише компіляції. Оскільки обидва компілюються до однієї ІР, продуктивність виконання повинна бути однаковою.
lzcd

що підвищення продуктивності буде тільки на компіляції
храповик урод


0

Відповідно до деякої документації, яку я знайшов, це стосується того, що випускає компілятор.

Швидкий пошук виявляє: http://stylecop.soyuz5.com/SA1122.html

Чому це подано під "Правилами читабельності" з цим описом, викликає спантеличення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.