Bagikan melalui


PERINGATAN CA1831: Gunakan AsSpan alih-alih pengindeks berbasis Rentang untuk string

Aturan penganalisis kode .NET CA1831 diaktifkan, secara default, mulai dari .NET 5. Ini menghasilkan peringatan build untuk kode apa pun di mana Rangepengindeks berbasis digunakan pada string, tetapi tidak ada salinan yang dimaksudkan.

Deskripsi perubahan

Mulai dari .NET 5, .NET SDK menyertakan penganalisis kode sumber .NET. Beberapa aturan ini diaktifkan, secara default, termasuk CA1831. Jika proyek Anda berisi kode yang melanggar aturan ini dan dikonfigurasi untuk memperlakukan peringatan sebagai kesalahan, perubahan ini dapat merusak build Anda.

Aturan CA1831 menemukan instans di mana Rangepengindeks berbasis digunakan pada string, tetapi tidak ada salinan yang dimaksudkan. RangeJika pengindeks berbasis digunakan langsung pada string untuk menghasilkan cast implisit, salinan yang tidak perlu dari bagian string yang diminta dibuat. Misalnya:

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

CA1831 menyarankan penggunaan Rangepengindeks berbasis pada rentang string, sebagai gantinya. Misalnya:

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

Versi yang diperkenalkan

5.0

  • Untuk memperbaiki kode Anda dan menghindari alokasi yang tidak perlu, panggil AsSpan(String) atau AsMemory(String) sebelum menggunakan Rangepengindeks berbasis. Misalnya:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Jika Anda tidak ingin mengubah kode, Anda dapat menonaktifkan aturan dengan mengatur tingkat keparahannya ke suggestion atau none. Untuk informasi selengkapnya, lihat Mengonfigurasi aturan analisis kode.

  • Untuk menonaktifkan analisis kode sepenuhnya, atur EnableNETAnalyzers ke false dalam file proyek Anda. Untuk informasi selengkapnya, lihat EnableNETAnalyzers.

API yang Terpengaruh