CA1870: 캐시된 'SearchValues' 인스턴스 사용
속성 | 값 |
---|---|
규칙 ID | CA1870 |
타이틀 | 캐시된 'SearchValues' 인스턴스 사용 |
범주 | 성능 |
수정 사항이 주요 변경인지 여부 | 주요 변경 아님 |
.NET 8에서 기본적으로 사용 | 제안 사항 |
원인
IndexOfAny
또는 ContainsAny
메서드는 대신 사용할 SearchValues 수 있는 방식으로 많은 상수 값으로 호출됩니다.
규칙은 이미 최적의 구현을 사용하므로 최대 5개의 값을 사용하는 호출에 플래그를 지정하지 않습니다.
규칙 설명
캐시된 SearchValues<T> 인스턴스를 사용하는 것이 값을 직접 전달하거나 IndexOfAny
ContainsAny
전달하는 것보다 더 효율적입니다.
위반 문제를 해결하는 방법
필드에서 인스턴스를 SearchValues<T> 만들고 캐시한 static readonly
다음, 해당 인스턴스를 IndexOfAny
전달하거나 ContainsAny
대신 호출합니다.
이 변환을 수행하는 코드 수정기를 사용할 수 있습니다.
예시
다음 코드 조각은 CA1870의 두 가지 위반을 보여 줍니다.
static readonly char[] MyValues = new[] { 'a', 'b', 'c', 'x', 'y', 'z' };
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(MyValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept("abcxyz");
}
다음 코드 조각은 위반을 해결합니다.
private static readonly SearchValues<char> s_myValues = SearchValues.Create("abcxyz");
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(s_myValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept(s_myValues);
}
동일한 값 s_myValues
집합을 사용하여 IndexOfAny
여러 번의 호출이 있는 경우 다시 사용해야 합니다.
경고를 표시하지 않는 경우
성능이 중요하지 않은 경우 이 경고를 표시하지 않는 것이 안전합니다.
경고 표시 안 함
단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.
#pragma warning disable CA1870
// The code that's violating the rule is on this line.
#pragma warning restore CA1870
파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none
으로 설정합니다.
[*.{cs,vb}]
dotnet_diagnostic.CA1870.severity = none
자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.
.NET