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

В С#, каков наилучший способ распространения однострочного строкового литерала по нескольким исходным строкам?

Предположим, что у вас длинная строка ( > 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";

Мне интересно, есть ли что-то столь же чистое, когда вы не хотите новые строки.

4b9b3361

Ответ 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;

В любом случае компилятор будет "сбрасывать" эти константы в одну большую строку, поэтому для этой техники нет никакой стоимости во время выполнения по сравнению с исходным образцом кода.

Для такого подхода есть ряд преимуществ:

  • Подстроки могут быть легко использованы в других частях приложения.
  • Подстроки могут быть определены в нескольких файлах или типах, если это необходимо.