그것의 당신이 연결로 소수의 자리에 모두 StringBuilder를 사용하지 말아야 상식 :에,도구 (의 StringBuilder를 사용한다) String.Concat의 사용/남용을 감지하는
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);
내가 String.Concat
하는 소스 코드에 를 식별하기 위해 원료의 C# 소스 또는 컴파일 된 어셈블리 중 하나에서 실행할 수있는 도구가 있습니까 내가 뭐라고? (익숙하지 않다면 s += "foo"
은 일리노이 출력에서 String.Concat
에 매핑됩니다.) 분명히 전체 프로젝트를 사실적으로 검색 할 수없고 각 +=
을 평가하여 lvalue가 문자열인지 여부를 식별 할 수 없습니다.
이상적으로는 for/foreach 루프 내에서만 호출을 가리키지 만, 마다 모든 오감 (false positive)을 지정하기도합니다.String.Concat
입니다. 또한, 내 코드가 StringBuilder
을 사용하도록 자동으로 리팩터링하는 리팩토링 도구가 있음을 알고 있습니다 만,이 시점에서 Concat
사용을 식별하는 데에만 관심이 있습니다.
나는 내 코드에서 Gendarme과 FxCop을 일상적으로 실행했지만,이 도구들 중 어느 것도 내가 설명한 것을 식별하지 못한다. 그러나 @Cristian pointed out으로 이전 버전의 FxCop이이를 확인하는 데 사용되었습니다. FxCop의 이전 버전에서이 규칙을 추출하여 최신 버전 (1.36)에 사용하도록 지시하는 방법이 있습니까?
흠, C# (또는 .NET)에는 FindBugs가 필요합니다. –