Лучший синтаксис для создания многострочной строки - PullRequest
7 голосов
/ 02 октября 2009

Как лучше всего создать многострочную строку в C #?

Я знаю следующие методы:

Использование StringBuilder

var result = new StringBuilder().AppendLine("one").AppenLine("two").ToString()

выглядит слишком многословно.

Использование @

      var result = @"one
two"

выглядит некрасиво и плохо отформатировано.

Знаете ли вы лучшие способы?

Ответы [ 8 ]

21 голосов
/ 02 октября 2009

Что по этому поводу:

var result = string.Join(Environment.NewLine, new string[]{ 
    "one",
    "two" 
});

Это немного болезненно и, возможно, излишне, но дает возможность сохранить разделение строк в вашем коде.
Чтобы немного улучшить ситуацию, вы можете использовать вспомогательный метод:

static string MultiLine(params string[] args) {
    return string.Join(Environment.NewLine, args);
}

static void Main(string[] args) {
    var result = MultiLine( 
        "one",
        "two" 
    );
}
11 голосов
/ 02 октября 2009

Как насчет этого?

var result = "one\ntwo";

Если вам не нравятся окончания строк, зависящие от ОС, используйте Format:

var result = String.Format("one{0}two", Environment.NewLine);

(Ну, слово «суетливый» - не то слово: когда имеешь дело с текстовыми файлами, часто нужны или даже необходимы окончания строки, специфичные для ОС, при работе с устаревшим программным обеспечением.)

3 голосов
/ 02 октября 2009

«Бест» - очень и очень открытая точка.

Вы после:

  • Выполнение кода
  • Скорость кодер может написать это
  • Способность другого кодера легко понять это
  • Возможность другого кодера легко его модифицировать

Все это имеет большое значение для «лучшего» способа что-то сделать.

2 голосов
/ 02 октября 2009

Я бы сказал, это зависит от того, что Вам нужно ...

Но чтобы упростить это, я бы сказал:

var s = new StringBuilder();
s.Append("one");
s.Append("two");
s.ToString();

Но так как мы не знаем, зачем Вам это нужно. Довольно сложно дать лучшие подсказки

1 голос
/ 19 ноября 2009

Эмм, как насчет:

string s = 
  "abc\n" + 
  "def\n" ;
1 голос
/ 03 октября 2009

Начиная с того, что @codymanix сказал , вы можете поместить длинную многострочную строку в файл ресурсов. Это может быть проще для определенных сценариев развертывания, так как текст «файл» будет включен в вашу DLL / EXE.

1 голос
/ 03 октября 2009

Вы не должны определять большие строки в вашем исходном коде. Вы должны определить его во внешнем текстовом файле:

string s = File.OpenText("myfile.txt").ReadToEnd();
0 голосов
/ 02 октября 2009

Иногда вам нужно более одной строки. Я использую Environment.NewLine, но я поместил его в метод, чтобы умножить его. :)

    private string newLines(int multiplier)
    {
        StringBuilder newlines = new StringBuilder();
        for (int i = 0; i < multiplier; i++)
            newlines.Append(Environment.NewLine);
        return newlines.ToString();
    }
...