CA1845: 범위 기반 ‘string.Concat’을 사용하세요.
속성 | 값 |
---|---|
규칙 ID | CA1845 |
제목 | 범위 기반 '문자열을 사용합니다. Concat' |
범주 | 성능 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 9에서 기본적으로 사용 | 제안 사항 |
원인
이 규칙은 Substring 호출을 포함하는 문자열 연결 식을 찾아 Substring을 AsSpan으로 바꾸고 String.Concat의 범위 기반 오버로드를 사용하도록 제안합니다.
규칙 설명
Substring
을 호출하면 추출된 부분 문자열의 복사본이 생성됩니다. Substring
대신 AsSpan
을 사용하고 범위를 허용하는 string.Concat
의 오버로드를 호출하면 불필요한 문자열 할당을 제거할 수 있습니다.
위반 문제를 해결하는 방법
위반을 해결하려면:
- 문자열 연결을
string.Concat
호출로 바꿉니다. Substring
호출을AsSpan
호출로 바꿉니다.
다음 코드 조각에서는 위반 문제의 예제와 해결 방법을 보여 줍니다.
using System;
class Example
{
public void Method()
{
string text = "fwobz the fwutzle";
// Violation: allocations by Substring are wasteful.
string s1 = text.Substring(10) + "---" + text.Substring(0, 5);
// Fixed: using AsSpan avoids allocations of temporary strings.
string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
}
}
경고를 표시하지 않는 경우
이 규칙의 경고를 표시하도록 합니다. 추출된 부분 문자열이 범위 기반 등가물이 있는 메서드로 전달되기만 한다면 AsSpan
대신 Substring
을 사용할 이유가 없습니다.
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET