7

C#で複数行の文字列を作成するための最良の方法は何ですか?

私は次の方法を知っています:

StringBuilderの使用

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

冗長に見えます。

@を使用する

      var result = @"one
two"

醜く、フォーマットが悪いように見えます。

もっと良い方法を知っていますか?

4

8 に答える 8

21

これはどうですか:

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" 
    );
}
于 2009-10-02T07:51:48.747 に答える
11

これはどうですか?

var result = "one\ntwo";

OS固有の行末が気になる場合は、次を使用してFormatください。

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

(まあ、「うるさい」という言葉は正しい言葉ではありません。テキストファイルを扱う場合、レガシーソフトウェアを扱う場合、OS固有の行末が望まれるか、必要になることさえあります。)

于 2009-10-02T07:46:00.727 に答える
2

「ベスト」は非常にオープンエンドポイントです。

あなたは後ですか:

  • コードのパフォーマンス
  • コーダーがそれを書くことができる速度
  • 別のコーダーがそれを簡単に理解する能力
  • 別のコーダーが簡単に変更できる機能

これらはすべて、何かを行うための「最良の」方法に関して大きな違いをもたらします。

于 2009-10-02T07:50:46.003 に答える
2

私はそれがあなたが必要とするものに依存すると思います...

しかし、それを単純化するために、私は次のようにします。

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

しかし、私たちはあなたがそれを何のために必要としているのかわからないので。より良いヒントを与えるのはかなり難しいです

于 2009-10-02T08:02:34.687 に答える
1

ソースコードに大きな文字列を定義しないでください。外部テキストファイルで定義する必要があります。

string s = File.OpenText("myfile.txt").ReadToEnd();
于 2009-10-02T23:06:13.240 に答える
1

@codymanixが言ったことをリフして、長い複数行の文字列をリソースファイルに配置することができます。「ファイル」というテキストがDLL/EXEに含まれるため、特定の展開シナリオではこれが簡単になります。

于 2009-10-02T23:24:42.550 に答える
0

複数の行が必要な場合があります。私は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();
    }
于 2009-10-02T07:48:59.470 に答える
0

えーと、どうですか:

string s = 
  "abc\n" + 
  "def\n" ;
于 2009-11-19T04:19:23.380 に答える