Я предпочитаю «& lt;! -" "->" как "текст>"
<script type="text/javascript">
//some javascript here
@foreach (var item in itens)
{
<!--
var title = @(item.name)
...
-->
</script>
Пока два операнда являются строками, нет никакой разницы между использованием оператора +
и метода String.Concat
. Код с использованием оператора +
фактически компилируется в вызов String.Concat
.
Используйте тот, который наилучшим образом представляет ваше намерение с кодом.
Я использую +
, когда знаю, сколько строк будет объединено - но что, если у вас просто есть массив? В этом случае вы не будете знать, сколько раз применить +
, поэтому у вас будет для вызова метода (или зацикливания себя, что ужасно).
Я не помню, чтобы звонил string.Concat
очень часто - это определенная редкость.
Как говорит Гуффа, +
в любом случае компилируется в вызовы к string.Concat
- стоит знать, что string
на самом деле не имеет оператора +, что может быть причиной путаницы если вы когда-нибудь попробуете использовать его в отражении!
Одно из преимуществ +
состоит в том, что если все аргументы являются константными выражениями, компилятор выполнит конкатенацию за вас, так что вам не нужно делать это во время исполнения. Такое небольшое преимущество в производительности не будет значительным в большинстве кода, но всегда приятно, когда код, который я считаю наиболее читабельным , также имеет преимущество в производительности:)
У меня самого был тот же вопрос, и этот вопрос побудил меня немного исследовать его,
Я создал следующий класс
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
будет аналогичный набор операций, происходящих и с перегруженным оператором +. Мысли?
Портативность (твоя).
В других языках + может не объединяться, как вы ожидаете, если представлено двумя строками. Это может сделать что-то совершенно неожиданное. Или, в некоторых свободно типизированных языках, если вы поставите + между целочисленной или числовой скалярной переменной и строкой, он может не выдать предупреждение компилятора, попытаться преобразовать строку в числовое значение и добавить их.
Для сравнения, .concat () довольно очевиден и читабелен по сравнению с + в некоторых случаях.
Оператор + является математическим оператором. Поэтому перед конкатенацией строки с использованием этого оператора компилятор должен решить, использовать ли его как математический оператор для сложения или использовать его для конкатенации строк.
Например: если вы объединяете a + b + c + d + e + f, компилятор примет решение 5 раз, поскольку есть оператор 5 +.
Производительность не рекомендуется.
Однако, если у вас есть только одна конкатенация, я не думаю, что есть большая разница с точки зрения производительности при использовании + или метода Concat ()
Если честно; некоторые люди предпочитают это. Я знаю, что лучше использовать Concat, так как + на самом деле не очень интуитивно понятен. Особенно просто смотреть на код в глубине; Трудно сказать, являются ли вы числами, которые вы добавляете, двумя строками или двумя точками, с которыми вы добавляете вектор. :)
Я считаю, что это то же самое, что и строка a + строка b. Строковый тип в C # является неизменным , поэтому предпочтительным способом манипуляции со строками является StringBuilder. Как сказал Гуффа: «Используйте тот, который лучше всего отражает ваши намерения, с помощью кода». Конечно, для простого использования, где производительность не слишком важна, используйте + или concat.
, потому что вы можете использовать версию, которая принимает два объекта;)