次の方法で共有


警告 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

  • コードを修正し、不要な割り当てを回避するには、AsSpan(String) ベースのインデクサーを使用する前に、AsMemory(String)またはRangeを呼び出します。 例えば次が挙げられます。

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • コードを変更しない場合は、その重大度を suggestion または noneに設定して、ルールを無効にすることができます。 詳細については、「 コード分析ルールの構成」を参照してください。

  • コード分析を完全に無効にするには、 EnableNETAnalyzers をプロジェクト ファイル内の false に設定します。 詳細については、「 EnableNETAnalyzers」を参照してください。

影響を受ける API