14

重複の可能性:
文字列を連結するにはどうすればよいですか?

パフォーマンスが重要でない日常のタスクで文字列を連結するには、いくつかの方法があります。

  • result = a + ":" + b
  • result = string.Concat(a, ":", c)
  • result = string.Format("{0}:{1}", a, b);
  • StringBuilder approach
  • ... ?

効率は重要ではないが、コードを自分の好みに合わせて最も読みやすくしたい場合は、何を好みますか?なぜですか?

4

8 に答える 8

9

用途によります。2つの文字列を連結するだけの場合a + bは、を使用する方が。よりもはるかに読みやすくなりstring.Format("{0}{1}", a, b)ます。ただし、それはより複雑になっているので、私はを使用することを好みstring.Formatます。これを比較してください:

string x = string.Format("-{0}- ({1})", a, b);

に対して:

string x = "-" + a + "- (" + b + ")";

ほとんどの場合、最も読みやすい方法を見つけるのは非常に簡単だと思います。どちらが読みやすいかが議論の余地がある場合は、上司がこれらの無意味な議論にお金を払っていないので、1つだけ選んでください;-)

于 2010-07-18T19:52:19.613 に答える
8

string.Format私にとっては、しかし実際には、パフォーマンスと読みやすさを考慮して、目的に合ったものを使用します。

それが2つの変数だった場合、私は使用します。

string.Concat(str1, str2);

定数など、フォーマットが必要なものが含まれている場合。

string.Format("{0} + {1} = {2}", x, y, x + y);

またはSQLクエリのようなもの

string SqlQuery = "SELECT col1, col2, col3, col4" + 
                  "FROM table t " + 
                  "WHERE col1 = 1";

そして、パフォーマンスが重要な場合は文字列ビルダー。

于 2010-07-18T19:31:11.837 に答える
2

私の個人的な好みは次のとおりです。

+アプローチが最も読みやすく、正当な理由(i18n、パフォーマンスなど)がある場合にのみFormat()またはStringBuilderを使用します。私は(ほとんど)Concatを使用しません。

+アプローチは、Format()よりも読みやすいと思います。これは、{}プレースホルダーにどの変数が入れられているかを確認するために最後までスキップする必要がないためです。また、プレースホルダーが番号順になっていないと、imoがさらに読みにくくなります。

しかし、大規模なプロジェクトでは、後でi18nを必要とするプロジェクトでコードが(再)使用される可能性がある場合に備えて、スタイルガイドによるフォーマットの使用を強制するのが理にかなっていると思います。

于 2010-07-18T19:50:39.873 に答える
2

String.Format(...)が最も遅いです。

ループ内で行われない単純な連結の場合は、String.Concat(...)または+演算子を使用します。これは、ボンネットの下で同じに変換されます。より読みやすいものは非常に主観的です。

単純な連結にa を使用することはStringBuilder、単純な連結にも過剰であり、オーバーヘッドが多すぎる可能性があります。ループでのみ使用します。

于 2010-07-18T19:39:11.720 に答える
2

このようなもの(UIに送信されていると推測しています)の場合、私は間違いなくString.Format. 文字列を簡単に国際化できます。への呼び出しを grep しString.Formatて、翻訳形式に置き換えることができます。

于 2010-07-18T19:44:31.133 に答える
1

小さい文字列にはString.Formatを、大きい文字列にはStringBuilderを使用します。私の主な理由は読みやすさです。String.Format(またはStringBuilder.AppendFormat())を使用する方がはるかに読みやすいですが、それは個人的な好みであることを認めなければなりません。

非常に大きなテキスト生成の場合は、新しい(VS2010)T4前処理済みテンプレートの使用を検討することをお勧めします-それらは本当に素晴らしいです。

また、VB.NETを使用している場合は、キャスリーン・ドラードがhanselminutesのエピソード152で説明したXML文字通りの手法が好きです。

于 2010-07-18T19:53:09.750 に答える
1

使用することを好む:

String.Concatのような単純な連結の場合String.Concat("foo", bar);

String.Formatのような複雑なフォーマットの場合String.Format("<a href=\"{0}\">{1}</a>", url, text);

StringBuilder次のような大規模な連結の場合:

var sb = new StringBuilder();
sb.AppendLine("function fooBar() {");
sp.AppendLine(String.Join(Environment.NewLine, blah));
sp.AppendLine("}");
page.RegisterClientScript(page.GetType(), sb.ToString());

避けることを好む"foo" + "bar"(およびif (foo == "bar"). そして特にString.Format("{0}{1}", foo, bar)

throw new Exception("This code was" +
    "written by developer with" +
    "13\" monitor");
于 2010-07-18T20:03:57.017 に答える
1
  • 文字列.フォーマット

    いくつかの連結用。もっと使うために

  • StringBuilder アプローチ

たとえパフォーマンスが重要でなくても。私が守らなければならないチームの合意があります

于 2010-07-18T19:41:24.170 に答える