Bagikan melalui


CA1507: Gunakan nameof sebagai pengganti string

Properti Nilai
ID Aturan CA1507
Judul Gunakan nameof sebagai pengganti string
Golongan Kemampu
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

string harfiah atau konstanta yang cocok dengan nama parameter metode yang berisi atau nama properti dari jenis yang berisi digunakan sebagai argumen untuk metode.

Deskripsi aturan

Aturan CA1507 memberi bendera penggunaan string harfiah sebagai argumen ke metode atau konstruktor di mana ekspresi nameof (NameOf dalam Visual Basic) akan menambahkan pemeliharaan. Aturan diaktifkan jika semua kondisi berikut terpenuhi:

  • Argumen adalah string harfiah atau konstanta.

  • Argumen sesuai dengan parameter metode berjenis string atau konstruktor yang sedang dipanggil (artinya, tidak ada konversi yang terlibat di situs panggilan).

  • Yaitu:

    • Nama parameter yang dideklarasikan adalah paramName dan nilai konstanta string harfiah mencocokkan nama parameter metode, lambda, atau fungsi lokal di mana metode atau konstruktor sedang dipanggil.

    • Nama parameter yang dideklarasikan adalah propertyName dan nilai konstanta string harfiah mencocokkan nama properti jenis, di mana metode atau konstruktor sedang dipanggil.

Aturan CA1507 meningkatkan pemeliharaan kode dalam kasus di mana parameter dapat diganti namanya di masa depan, tetapi string harfiah secara keliru tidak diganti namanya. Dengan menggunakan nameof, simbol akan diganti namanya ketika parameter diganti namanya melalui operasi refaktor. Selain itu, setiap kesalahan ejaan atas nama parameter ditangkap oleh pengompilasi.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran, ganti string harfiah dengan ekspresi nameof (NameOf dalam Visual Basic). Misalnya, dua cuplikan kode berikut menunjukkan pelanggaran aturan dan cara memperbaikinya:

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

Tip

Perbaikan kode tersedia untuk aturan ini di Visual Studio. Untuk menggunakannya, posisikan kursor pada string harfiah dan tekan Ctrl+. (titik). Pilih Gunakan nameof untuk mengekspresikan nama simbol dari daftar opsi yang disajikan.

Code fix for CA1507 - use nameof to express symbol names

Kapan harus menekan peringatan

Aman untuk menyembunyikan pelanggaran aturan ini jika Anda tidak khawatir tentang pemeliharaan kode Anda.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA1507.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Baca juga