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

спасибо за @mindthief, ваш ответ поможет решить мою проблему сегодня. Функция ниже может группироваться днем ​​немного легче, надежда может помочь другим.

/**
 * group by day
 * @param query document {key1:123,key2:456}
 */
var count_by_day = function(query){
    return db.action.group(
    {
        keyf: function(doc) {
            var date = new Date(doc.time);
            var dateKey = (date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear();
            return {'date': dateKey};
        },
        cond:query,
        initial: {count:0},
        reduce: function(obj, prev) {
          prev.count++;
        }
    });
}

count_by_day({this:'is',the:'query'})
678
задан RBT 12 January 2017 в 00:11
поделиться

18 ответов

Использование вообще Вы и Ваша команда находите самое читаемое.

Другие ответы предположили, что новая строка создается каждый раз, когда Вы используете "". Это не верно - должный представить интернирование в виде строки, оно будет создано или однажды на блок или однажды на AppDomain (или возможно однажды для целого процесса - не уверенный в той передней стороне). Это различие незначительно - в широком масштабе, в широком масштабе незначительный.

то, Которое Вы находите более читаемыми, является другим разговором, как бы то ни было. Это субъективно и будет варьироваться от человека человеку - таким образом, я предлагаю, чтобы Вы узнали то, что большинство людей в Вашей команде как, и все идут с этим для непротиворечивости. Лично я нахожу "" легче читать.

аргумент, которые "" и " " легко приняты друг за друга, действительно не промывает со мной. Если Вы не используете пропорциональный шрифт (и я не работал с никакой разработчики, которые делают), довольно легко сказать различие.

776
ответ дан Otiel 12 January 2017 в 00:11
поделиться

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

1
ответ дан Magus 12 January 2017 в 00:11
поделиться

В то время как различие очень, Очень мало, различие все еще существуют.

1) "" создает объект в то время как Строка. Пустой не делает. Но этот объект будет создан однажды и будет сослан от строкового пула позже, если у Вас будет другой "" в коде.

2) Строка и строка являются тем же, но я рекомендовал бы использовать Строку. Пустой (а также Строка. Формат, Строка. Копия и т.д.), так как запись через точку указывает на класс, не оператор, и класс наличия, запускающийся с прописной буквы, соответствует стандартам кодирования C#.

1
ответ дан user34577 12 January 2017 в 00:11
поделиться

Компилятор должен сделать их все равно в конечном счете. Выберите стандарт так, чтобы Ваш код было легко считать и придерживаться его.

2
ответ дан Chris Marasti-Georg 12 January 2017 в 00:11
поделиться

Любой из первых двух был бы приемлем для меня. Я избежал бы последнего, потому что относительно легко представить ошибку путем помещения пространства между кавычками. Эту конкретную ошибку было бы трудно найти наблюдением. Не принимая опечаток, все семантически эквивалентны.

[РЕДАКТИРОВАНИЕ]

кроме того, Вы могли бы хотеть всегда использовать или string или String для непротиворечивости, но это - просто я.

3
ответ дан tvanfosson 12 January 2017 в 00:11
поделиться

Я не имею значения. Последний является самым быстрым для ввода хотя:)

5
ответ дан 12 January 2017 в 00:11
поделиться

Я использую третье, но других двух первое кажется менее нечетным. строка является псевдонимом для Строки, но наблюдение их через присвоение чувствует прочь.

3
ответ дан plinth 12 January 2017 в 00:11
поделиться

Это не имеет значения - что они - точно то же самое. Однако главное состоит в том, что необходимо быть последовательны

p.s. Я борюсь с этим видом "точек правильная вещь" все время.

4
ответ дан Calanus 12 January 2017 в 00:11
поделиться

string синоним для System.String тип, Они идентичны.

Значения также идентичны: string.Empty == String.Empty == ""

я не использовал бы символьную константу "" в коде, скорее string.Empty или String.Empty - легче видеть то, что имел в виду программист.

Между string и String мне нравится нижний регистр string более справедливый, потому что я раньше работал с Дельфи для партии лет, и стиль Дельфи строчный string.

Так, если бы я был Вашим боссом, Вы записали бы string.Empty

6
ответ дан zendar 12 January 2017 в 00:11
поделиться

лучший код не является никаким кодом во всем :

фундаментальный характер кодирования - то, что наша задача, как программисты, состоит в том, чтобы распознать, что каждое решение, которое мы принимаем, является компромиссом. [†¦] Запускаются с краткости. Увеличьте другие размеры как требуется путем тестирования.

, Следовательно, меньше кода является лучшим кодом: Предпочтите "" string.Empty или String.Empty. Те два в шесть раз дольше без дополнительного преимущества — В, конечно, никакая добавленная ясность, поскольку они выражают ту же самую информацию.

75
ответ дан Konrad Rudolph 12 January 2017 в 00:11
поделиться

Я предпочел бы string String. выбор string.Empty [более чем 113] - вопрос выбора того и липкий с ним. Преимущество использования string.Empty является им, очень очевидно, что Вы имеете в виду, и Вы случайно не копируете по непечатаемым символам как "\x003" в Вашем "".

42
ответ дан CodesInChaos 12 January 2017 в 00:11
поделиться

Я не собирался вмешиваться, но я вижу, что некоторая неправильная информация брошена сюда.

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

, Поскольку некоторые другие упомянули, нет никакого различия вообще между string.Empty и String.Empty.

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

22
ответ дан Brian Leahy 12 January 2017 в 00:11
поделиться

Я лично предпочитаю, "" если нет серьезное основание к чему-то более сложному.

15
ответ дан MidnightGun 12 January 2017 в 00:11
поделиться

Любое вышеупомянутое.

существуют многие, много лучших вещей разглагольствовать. Такой как, какая цветная кора удовлетворяет дереву лучше всего, я думаю неопределенный коричневый с оттенками приятного мха.

7
ответ дан Quibblesome 12 January 2017 в 00:11
поделиться

String.Empty и string.Empty эквивалентны. String имя класса BCL; string его псевдоним C# (или ярлык, если Вы будете). То же как с Int32 и int. См. документы для большего количества примеров.

До "" затронут, я не действительно уверен.

Лично, я всегда использую string.Empty.

13
ответ дан Palec 12 January 2017 в 00:11
поделиться

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

7
ответ дан 12 January 2017 в 00:11
поделиться

Практически каждый разработчик знает, что означает "". Я лично столкнулся с String.Empty в первый раз, и мне пришлось потратить некоторое время на поиск в Google, чтобы выяснить, действительно ли они то же самое.

10
ответ дан 22 November 2019 в 21:40
поделиться

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

Глядя на закулисный код, вы действительно не видите никакой разницы. Единственное отличие заключается в IL, который string.Empty использует код операции ldsfld и "" использует код операции ldstr , но это только потому, что string.Empty статичен, и обе инструкции делают то же самое. Если вы посмотрите на созданную сборку, она будет точно такой же.

Код C #

private void Test1()
{
    string test1 = string.Empty;    
    string test11 = test1;
}

private void Test2()
{
    string test2 = "";    
    string test22 = test2;
}

Код IL

.method private hidebysig instance void 
          Test1() cil managed
{
  // Code size       10 (0xa)
  .maxstack  1
  .locals init ([0] string test1,
                [1] string test11)
  IL_0000:  nop
  IL_0001:  ldsfld     string [mscorlib]System.String::Empty
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  stloc.1
  IL_0009:  ret
} // end of method Form1::Test1
.method private hidebysig instance void 
        Test2() cil managed
{
  // Code size       10 (0xa)
  .maxstack  1
  .locals init ([0] string test2,
                [1] string test22)
  IL_0000:  nop
  IL_0001:  ldstr      ""
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  stloc.1
  IL_0009:  ret
} // end of method Form1::Test2

Код сборки

        string test1 = string.Empty;
0000003a  mov         eax,dword ptr ds:[022A102Ch] 
0000003f  mov         dword ptr [ebp-40h],eax 

        string test11 = test1;
00000042  mov         eax,dword ptr [ebp-40h] 
00000045  mov         dword ptr [ebp-44h],eax 
        string test2 = "";
0000003a  mov         eax,dword ptr ds:[022A202Ch] 
00000040  mov         dword ptr [ebp-40h],eax 

        string test22 = test2;
00000043  mov         eax,dword ptr [ebp-40h] 
00000046  mov         dword ptr [ebp-44h],eax 
373
ответ дан 22 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

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