警告 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
に設定して、ルールを無効にすることができます。 詳細については、「コード分析ルールを構成する」を参照してください。コード分析を完全に無効にするには、プロジェクト ファイルで
EnableNETAnalyzers
をfalse
に設定します。 詳細については、「EnableNETAnalyzers」を参照してください。
影響を受ける API
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示