Мне интересно, что такое "лучшая практика" для разрыва длинных строк в исходном коде С#. Эта строка
"string1"+
"string2"+
"string3"
объединяется во время компиляции или во время выполнения?
Мне интересно, что такое "лучшая практика" для разрыва длинных строк в исходном коде С#. Эта строка
"string1"+
"string2"+
"string3"
объединяется во время компиляции или во время выполнения?
Это было сделано во время компиляции. Это точно эквивалентно "string1string2string3".
Предположим, что у вас есть:
string x = "string1string2string3"
string y = "string1" + "string2" + "string3"
Компилятор выполнит соответствующее интернирование, так что x и y относятся к тем же объектам.
EDIT: В ответах и комментариях много говорится о StringBuilder
. Многие разработчики, похоже, считают, что конкатенация строк всегда должна выполняться с помощью StringBuilder
. Это чрезмерное обобщение - стоит понимать почему StringBuilder
хорош в некоторых ситуациях, а не в других.
Если пробелы не важны, вы можете использовать символ @escape для записи многострочных строк в вашем коде. Это полезно, если у вас есть запрос в коде, например:
string query = @"SELECT whatever
FROM tableName
WHERE column = 1";
Это даст вам строку с разрывами строк и вкладками, но для запроса, который не имеет значения.
Ваш пример будет объединен во время компиляции. Все встроенные строки и строковые переменные const конкатенируются во время компиляции.
Что-то, о чем нужно помнить, состоит в том, что включение любых строк в readonly приведет к задержке выполнения во время выполнения. string.Empty и Environment.NewLine - это только переменные строки readonly.
Конкатенация выполняется во время компиляции, поэтому накладные расходы не выполняются.
это действительно зависит от того, что вам нужно. Как правило, если вам нужны конкат-строки, лучшая производительность во время выполнения будет достигнута с помощью StringBuilder. Если вы ссылаетесь на исходный код на что-то вроде var str = "String1" + "String2", он будет конвертировать в строку str = "String1String2" при компиляции. В этом случае у вас нет накладных расходов на конкатенацию
StringBuilder - хороший способ, если у вас много (более четырех) строки для конкатенации. Это быстрее.
Использование String.Concat в вашем примере выше выполняется во время компиляции. Поскольку они являются буквальными строками, они оптимизируются компилятором.
Если вы используете переменные:
string a = "string1";
string b = "string2";
string c = a + b;
Это выполняется во время выполнения.
Не можете ли вы использовать StringBuilder
?
Есть способ сделать это. Моя favorete использует метод string из С#. Пример:
string s = string.Format( "{0} {1} {0}", "Hello", "By" ); результатом является s = "Hello By Hello";
StringBuilder будет вашим самым быстрым подходом, если вы используете любое количество строк.
http://dotnetperls.com/Content/StringBuilder-1.aspx
Если вы просто делаете несколько строк (5 или меньше - это правильное правило), скорость не будет иметь значения, какой тип конкатенации вы используете.