Почему Строка использования. Concat () в C#?

Я предпочитаю «& lt;! -" "->" как "текст>"

<script type="text/javascript">
//some javascript here     

@foreach (var item in itens)
{                 
<!--  
   var title = @(item.name)
    ...
-->

</script>
26
задан chobo2 24 November 2009 в 04:03
поделиться

8 ответов

Пока два операнда являются строками, нет никакой разницы между использованием оператора + и метода String.Concat. Код с использованием оператора + фактически компилируется в вызов String.Concat.

Используйте тот, который наилучшим образом представляет ваше намерение с кодом.

33
ответ дан Guffa 15 October 2019 в 07:49
поделиться

Я использую +, когда знаю, сколько строк будет объединено - но что, если у вас просто есть массив? В этом случае вы не будете знать, сколько раз применить +, поэтому у вас будет для вызова метода (или зацикливания себя, что ужасно).

Я не помню, чтобы звонил string.Concat очень часто - это определенная редкость.

Как говорит Гуффа, + в любом случае компилируется в вызовы к string.Concat - стоит знать, что string на самом деле не имеет оператора +, что может быть причиной путаницы если вы когда-нибудь попробуете использовать его в отражении!

Одно из преимуществ + состоит в том, что если все аргументы являются константными выражениями, компилятор выполнит конкатенацию за вас, так что вам не нужно делать это во время исполнения. Такое небольшое преимущество в производительности не будет значительным в большинстве кода, но всегда приятно, когда код, который я считаю наиболее читабельным , также имеет преимущество в производительности:)

14
ответ дан bdukes 15 October 2019 в 07:49
поделиться

У меня самого был тот же вопрос, и этот вопрос побудил меня немного исследовать его,

Я создал следующий класс

public class Class1
{
    string str = "One" + "Team";
    string str2 = string.Concat("One", "Team");
}

. Ниже приведен соответствующий код IL для тот.

.method public hidebysig specialname rtspecialname 
        instance void .ctor() cil managed
{ 
    // Code size        40 (0x28)   
    .maxstack  8   
    IL_0000:  ldarg.0   
    IL_0001:  ldstr     "OneTeam"   
    IL_0006:  stfld     string StringConcat.Class1::str  
    IL_000b:  ldarg.0   
    IL_000c:  ldstr     "One"   
    IL_0011:  ldstr     "Team"  
    IL_0016:  call      string [mscorlib]System.String::Concat(string, string)   
    IL_001b:  stfld     string StringConcat.Class1::str2   
    IL_0020:  ldarg.0   
    IL_0021:  call      instance void [mscorlib]System.Object::.ctor()  
    IL_0026:  nop   
    IL_0027:  ret 
    // end of method Class1::.ctor
} 

Для меня определенно похоже, что string.Concat имеет больше шагов, чем перегруженный оператор +. Но я точно знаю, что внутри класса System.String будет аналогичный набор операций, происходящих и с перегруженным оператором +. Мысли?

5
ответ дан Ghost4Man 15 October 2019 в 07:49
поделиться

Портативность (твоя).

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

Для сравнения, .concat () довольно очевиден и читабелен по сравнению с + в некоторых случаях.

1
ответ дан Kyle Hodgson 15 October 2019 в 07:49
поделиться

Оператор + является математическим оператором. Поэтому перед конкатенацией строки с использованием этого оператора компилятор должен решить, использовать ли его как математический оператор для сложения или использовать его для конкатенации строк.

Например: если вы объединяете a + b + c + d + e + f, компилятор примет решение 5 раз, поскольку есть оператор 5 +.

Производительность не рекомендуется.

Однако, если у вас есть только одна конкатенация, я не думаю, что есть большая разница с точки зрения производительности при использовании + или метода Concat ()

1
ответ дан user5816960 15 October 2019 в 07:49
поделиться

Если честно; некоторые люди предпочитают это. Я знаю, что лучше использовать Concat, так как + на самом деле не очень интуитивно понятен. Особенно просто смотреть на код в глубине; Трудно сказать, являются ли вы числами, которые вы добавляете, двумя строками или двумя точками, с которыми вы добавляете вектор. :)

0
ответ дан Suroot 15 October 2019 в 07:49
поделиться

Я считаю, что это то же самое, что и строка a + строка b. Строковый тип в C # является неизменным , поэтому предпочтительным способом манипуляции со строками является StringBuilder. Как сказал Гуффа: «Используйте тот, который лучше всего отражает ваши намерения, с помощью кода». Конечно, для простого использования, где производительность не слишком важна, используйте + или concat.

0
ответ дан Jeff 15 October 2019 в 07:49
поделиться

, потому что вы можете использовать версию, которая принимает два объекта;)

2
ответ дан 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

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