Подтвердить что ты не робот

Лучший способ разбить длинные строки в исходном коде С#

Мне интересно, что такое "лучшая практика" для разрыва длинных строк в исходном коде С#. Эта строка

"string1"+
"string2"+
"string3"

объединяется во время компиляции или во время выполнения?

4b9b3361

Ответ 1

Это было сделано во время компиляции. Это точно эквивалентно "string1string2string3".

Предположим, что у вас есть:

string x = "string1string2string3"
string y = "string1" + "string2" + "string3"

Компилятор выполнит соответствующее интернирование, так что x и y относятся к тем же объектам.

EDIT: В ответах и ​​комментариях много говорится о StringBuilder. Многие разработчики, похоже, считают, что конкатенация строк всегда должна выполняться с помощью StringBuilder. Это чрезмерное обобщение - стоит понимать почему StringBuilder хорош в некоторых ситуациях, а не в других.

Ответ 2

Если пробелы не важны, вы можете использовать символ @escape для записи многострочных строк в вашем коде. Это полезно, если у вас есть запрос в коде, например:

string query = @"SELECT whatever
FROM tableName
WHERE column = 1";

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

Ответ 3

Ваш пример будет объединен во время компиляции. Все встроенные строки и строковые переменные const конкатенируются во время компиляции.

Что-то, о чем нужно помнить, состоит в том, что включение любых строк в readonly приведет к задержке выполнения во время выполнения. string.Empty и Environment.NewLine - это только переменные строки readonly.

Ответ 4

Конкатенация выполняется во время компиляции, поэтому накладные расходы не выполняются.

Ответ 5

это действительно зависит от того, что вам нужно. Как правило, если вам нужны конкат-строки, лучшая производительность во время выполнения будет достигнута с помощью StringBuilder. Если вы ссылаетесь на исходный код на что-то вроде var str = "String1" + "String2", он будет конвертировать в строку str = "String1String2" при компиляции. В этом случае у вас нет накладных расходов на конкатенацию

Ответ 6

StringBuilder - хороший способ, если у вас много (более четырех) строки для конкатенации. Это быстрее.

Использование String.Concat в вашем примере выше выполняется во время компиляции. Поскольку они являются буквальными строками, они оптимизируются компилятором.

Если вы используете переменные:

string a = "string1";
string b = "string2";
string c = a + b;

Это выполняется во время выполнения.

Ответ 7

Не можете ли вы использовать StringBuilder?

Ответ 8

Есть способ сделать это. Моя favorete использует метод string из С#. Пример:

string s = string.Format( "{0} {1} {0}", "Hello", "By" ); результатом является s = "Hello By Hello";

Ответ 9

StringBuilder будет вашим самым быстрым подходом, если вы используете любое количество строк.

http://dotnetperls.com/Content/StringBuilder-1.aspx

Если вы просто делаете несколько строк (5 или меньше - это правильное правило), скорость не будет иметь значения, какой тип конкатенации вы используете.