Как насчет следующего метода расширения (который основан на общих тегах oneLine метод) ...
using System;
using System.Text.RegularExpressions;
using static System.Text.RegularExpressions.RegexOptions;
namespace My.Name.Space
{
public static class StringHelper
{
public static string AsOneLine(this string text, string separator = " ")
{
return new Regex(@"(?:\n(?:\s*))+").Replace(text, separator).Trim();
}
}
}
... в сочетании с буквенным строковым литералом , используемым как таковой:
var mySingleLineText = @"
If we wish to count lines of code, we should not regard them
as 'lines produced' but as 'lines spent'.
".AsOneLine();
Обратите внимание, что пробелы "внутри" строки остаются неизменными, например:
// foo bar hello world.
var mySingleLineText = @"
foo bar
hello world.
".AsOneLine();
Если вы не хотите, чтобы символы новой строки заменялись пробелами, тогда передайте ""
в качестве аргумента методу расширения:
// foobar
var mySingleLineText = @"
foo
bar
".AsOneLine("");
Обратите внимание: Эта форма конкатенации строк выполняется во время выполнения благодаря задействованному вспомогательному методу (в отличие от конкатенации через оператор +
, возникающей во время компиляции, как также указано в принят ответ). Так что, если производительность является проблемой, используйте +
. Если вы имеете дело с длинными фразами и читаемостью, а «простота использования» - в центре внимания, то, возможно, стоит рассмотреть предложенный выше подход.