В С#, каков наилучший способ распространения однострочного строкового литерала по нескольким исходным строкам?
Предположим, что у вас длинная строка ( > 80 символов), которую вы хотите распространять по нескольким исходным строкам, но не хотите включать символы новой строки.
Один из вариантов заключается в объединении подстрок:
string longString = "Lorem ipsum dolor sit amet, consectetur adipisicing" +
" elit, sed do eiusmod tempor incididunt ut labore et dolore magna" +
" aliqua. Ut enim ad minim veniam";
Есть ли лучший способ, или это лучший вариант?
Изменить: "Лучше всего", я имею в виду, что для кодера проще всего читать, писать и редактировать. Например, если вы сделали хотите новые строки, это очень просто посмотреть на:
string longString =
@"Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam";
Мне интересно, есть ли что-то столь же чистое, когда вы не хотите новые строки.
Ответы
Ответ 1
Я бы использовал вариацию вашего метода:
string longString =
"Lorem ipsum dolor sit amet, consectetur adipisicing " +
"elit, sed do eiusmod tempor incididunt ut labore et dolore magna " +
"aliqua. Ut enim ad minim veniam.";
Здесь я начинаю строку в строке после знака равенства, чтобы все они выстроились в линию, и я также убеждаюсь, что пространство происходит в конце строки (опять же, для целей выравнивания).
Ответ 2
Если вы хотите, чтобы код был минимальным, и вы можете легко его прочитать, я все равно поеду с строкой @literal. Плюс его быстрее, если вы источник длинный и...
string verbatimLit = @"
__ __
/ `-' \
/_| N |_\ Sometimes
| I | format in code
| N | matters
|_____|
";
Затем удалите строки из строки в 1 строке,
verbatimLit.Replace(Environment.NewLine, " ");
Ответ 3
Ваша первоначальная идея, вероятно, самый простой способ иметь встроенную литеральную строку в вашем коде. Компилятор С# объединяет литералы, объединенные с +
- поэтому он по существу эквивалентен одной очень длинной строке.
Другим вариантом, конечно же, является экстернализация строки в файле конфигурации или файле настроек. Это позволит сделать его более легко читаемым и легче изменить или локализовать. Я лично избегаю размещать длинные строки текста непосредственно в коде приложения, если они не очень статичны и не нуждаются в локализации - текст сообщения о внутреннем исключении и т.п.
Ответ 4
Для SQL-запросов или других длинных строк, которые имеют свой собственный синтаксис, я иногда делаю что-то вроде этого:
private const string QUERY = @"
SELECT *
FROM Table1 AS T1
INNER JOIN Table2 AS T2 ON T1.ID = T2.T1ID
WHERE T1.VALUE = @P1
GROUP BY T2.OTHERVALUE
";
Это оставляет форматирование строки неповрежденной.
Ответ 5
Когда вы находите себя под вопросом о том, как выполнять многострочные строки, вам может быть лучше использовать файл ресурсов.
Ответ 6
Следуя Tj Kellie
answer, в С# 6.0 вы можете легко иметь одну команду для выполнения конкатенации и встраивания различной информации с помощью строковой интерполяции, а также не иметь строк новой строки, несмотря на определение строки на нескольких строках.
Комплексный пример, включающий все это, может выглядеть следующим образом:
public int? BestTime { get; set; }
public int? WorstTime { get; set; }
public int? AvgTime { get; set; }
public int TimeoutReachedCount { get; set; }
public int AllRunCount { get; set; }
public string Str => [email protected]"
Ran {AllRunCount} times;
Reached timeout {TimeoutReachedCount} times;
Best time = {(BestTime.HasValue ? BestTime.ToString() : "N/A")};
Worst time = {(WorstTime.HasValue ? WorstTime.ToString() : "N/A")};
Average time = {(AvgTime.HasValue ? AvgTime.ToString() :"N/A")};"
.Replace(Environment.NewLine, "");
Конечно, для добавления пробелов в конце строк необходимо использовать дополнительную осторожность, чтобы избежать слияния слов.
Ответ 7
Вы можете использовать несколько констант, а затем объединить их в одну большую строку:
const string part1 = "part 1";
const string part2 = "part 2";
const string part3 = "part 3";
string bigString = part1 + part2 + part3;
В любом случае компилятор будет "сбрасывать" эти константы в одну большую строку, поэтому для этой техники нет никакой стоимости во время выполнения по сравнению с исходным образцом кода.
Для такого подхода есть ряд преимуществ:
- Подстроки могут быть легко использованы в других частях приложения.
- Подстроки могут быть определены в нескольких файлах или типах, если это необходимо.