Share via


경고 CA1831: 문자열에 대해 범위 기반 인덱서 대신 AsSpan 사용

.NET 코드 분석기 규칙 CA1831은 .NET 5부터 기본적으로 사용됩니다. Range 기반 인덱서가 문자열에서 사용되지만 복사본이 의도되지 않은 코드에 관한 빌드 경고를 생성합니다.

변경 내용 설명

.NET 5부터 .NET SDK에는 .NET 소스 코드 분석기가 포함됩니다. CA1831을 포함하여 해당 규칙 중 여러 개가 기본적으로 사용됩니다. 해당 규칙을 위반하는 코드가 프로젝트에 포함되고 프로젝트가 경고를 오류로 처리하도록 구성된 경우 해당 변경으로 인해 빌드의 호환성이 손상될 수 있습니다.

규칙 CA1831은 Range 기반 인덱서가 문자열에서 사용되지만 복사본이 의도되지 않은 인스턴스를 찾습니다. Range 기반 인덱서가 암시적 캐스트를 생성하기 위해 문자열에서 직접 사용되는 경우에는 요청된 문자열 부분의 불필요한 복사본이 생성됩니다. 예시:

ReadOnlySpan<char> slice = str[1..3];

CA1831은 대신에 문자열의 ‘범위’에서 Range 기반 인덱서를 사용하도록 제안합니다. 예시:

ReadOnlySpan<char> slice = str.AsSpan()[1..3];

도입된 버전

5.0

  • 코드를 수정하고 불필요한 할당을 방지하려면 Range 기반 인덱서를 사용하기 전에 AsSpan(String) 또는 AsMemory(String)를 호출합니다. 예시:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • 코드를 변경하지 않으려는 경우 심각도를 suggestion 또는 none으로 설정하여 규칙을 사용하지 않을 수 있습니다. 자세한 내용은 코드 분석 규칙 구성을 참조하세요.

  • 코드 분석을 완전히 사용하지 않으려면 프로젝트 파일에서 EnableNETAnalyzersfalse로 설정합니다. 자세한 내용은 EnableNETAnalyzers를 참조하세요.

영향을 받는 API