どのような場合にご利用StringBuilder.AppendLine/文字列になります。形式前StringBuilder.AppendFormat?

StackOverflow https://stackoverflow.com/questions/349724

質問

最近の 疑問点が 用文字列になります。Format().一部の私の回答が含まれてのご提案の利用StringBuilder.AppendLine(文字列です。フォーマット(...)).Jon Skeetことを示唆したことは悪い例を提案した組み合わせAppendLineとAppendFormat.

で起こっていましたが、私たん決済自分自身への"優先設定"アプローチのために使用されます。と思いることができるかもしれのかかる場合は、以下のようなものに興味があるか他の人としての"ベストプラクティス":

sbuilder.AppendFormat("{0} line", "First").AppendLine();
sbuilder.AppendFormat("{0} line", "Second").AppendLine();

// as opposed to:

sbuilder.AppendLine( String.Format( "{0} line", "First"));
sbuilder.AppendLine( String.Format( "{0} line", "Second"));
役に立ちましたか?

解決

私はとしてだけでなく、より読みやすくするだけでなく、AppendFormatを呼び出すよりもパフォーマンスAppendLine続くAppendLine(string.Format(...))閲覧ます。

後者は全く新しい文字列を作成し、既存のビルダーに卸売、それを追加します。私が言うほど遠くに行くつもりはない「なぜ、その後のStringBuilderを使用してわざわざ?」しかしそれは、StringBuilderのの精神に対するビットを思えん。

他のヒント

を作成し延長方法。

public static StringBuilder AppendLine(this StringBuilder builder, string format, params object[] args)
{
    builder.AppendFormat(format, args).AppendLine();
    return builder;
}

理由う:

  • しないなどの架してい AppendLine(string.Format(...)), とされているものと考えられる。
  • を防止すっかり忘れを追加する .AppendLine() 一部の末行います。
  • は読みやがりの意見).

なっているというAppendLineが、"お前が変更でAppendFormattedLine'または何をしています。楽しいものライニングとその他の電話へAppendLine'もの:

var builder = new StringBuilder();

builder
    .AppendLine("This is a test.")
    .AppendLine("This is a {0}.", "test");

をつけたいこれらの各過ご利用のAppendFormat法StringBuilder.

String.Formatのは、内部StringBuilderオブジェクトを作成します。これにより、

sbuilder.AppendLine( String.Format( "{0} line", "First"));

そのオーバーヘッドのすべての文字列ビルダの追加インスタンスが作成されます。

<時間>

mscorlibのリフレクター、Commonlauageruntimelibary、System.String.Format

public static string Format(IFormatProvider provider, string format, params object[] args)
{
    if ((format == null) || (args == null))
    {
        throw new ArgumentNullException((format == null) ? "format" : "args");
    }
    StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8));
    builder.AppendFormat(provider, format, args);
    return builder.ToString();
}

のパフォーマンスが重要な場合は、完全に()AppendFormatを避けるようにしてください。使用する複数の追加()またはAppendLineは()の代わりに呼び出します。これはあなたのコードが大きく、あまり読みやすくない、ない文字列解析を行う必要がありませんので、それは高速です。文字列解析は、あなたが想像よりも遅くなります。

私は一般的に使用します:

sbuilder.AppendFormat("{0} line", "First");
sbuilder.AppendLine();
sbuilder.AppendFormat("{0} line", "Second");
sbuilder.AppendLine();

パフォーマンスが重要である場合を除き、その場合には、私が使用したい:

sbuilder.Append("First");
sbuilder.AppendLine(" line");
sbuilder.Append("Second");
sbuilder.AppendLine(" line");

この(もし「第一」および「第二」ではない文字列リテラルもちろん、これはより理にかなって)

AppendFormat()がAppendLineよりも多く読みやすいです(String.Formatの())

私は、この構造を好むます:

sbuilder.AppendFormat("{0} line\n", "First");

確かに改行を分離するために言うべきものがありますが。

それだけで積極的にひどい単に使用することです。

sbuilder.AppendFormat("{0} line\n", first);

?私が意味する、私はそれは、プラットフォームに依存しないまたは何でもありません知っているが、10例中9で、それは仕事を取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top