少数の連結の代わりに StringBuilder を使用しないことはよく知られています。
string s = "Hello";
if (greetingWorld)
{
s += " World";
}
s += "!";
ただし、かなりのサイズのループでは、StringBuilder が当然の選択です。
string s = "";
foreach (var i in Enumerable.Range(1,5000))
{
s += i.ToString(); // <- bad idea!
}
Console.WriteLine(s);
生の C# ソースまたはコンパイル済みアセンブリのいずれかで実行して、ソース コード内で呼び出されている場所を特定できるツールはありますか? String.Concat
(よくわからない場合は、IL 出力にs += "foo"
マップされString.Concat
ます。) 明らかに、プロジェクト全体を現実的に検索し、すべてを評価+=
して左辺値が文字列かどうかを識別することはできません。
理想的には、for/foreach ループ内の呼び出しのみを指摘しますが、すべて の注目の誤検知にも我慢しますString.Concat
。また、使用するコードを自動的にリファクタリングするリファクタリング ツールがいくつかあることは承知していますが、現時点では使用法をStringBuilder
特定することにのみ関心があります。Concat
私は自分のコードで Gendarme と FxCop を定期的に実行していますが、これらのツールはどちらも、私が説明した内容を識別しません。ただし、@Cristian が指摘したように、以前のバージョンの FxCop はこれをチェックしていました。古いバージョンの FxCop からそのルールだけを抽出し、新しいバージョン (1.36) にそれを使用するように指示する方法があるでしょうか?