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