.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
推奨されるアクション
コードを修正し、不要な割り当てを回避するには、AsSpan(String) ベースのインデクサーを使用する前に、AsMemory(String)またはRangeを呼び出します。 例えば次が挙げられます。
ReadOnlySpan<char> slice = str.AsSpan()[1..3];コードを変更しない場合は、その重大度を
suggestionまたはnoneに設定して、ルールを無効にすることができます。 詳細については、「 コード分析ルールの構成」を参照してください。コード分析を完全に無効にするには、
EnableNETAnalyzersをプロジェクト ファイル内のfalseに設定します。 詳細については、「 EnableNETAnalyzers」を参照してください。
影響を受ける API
.NET