CA1857: Parameter mengharapkan konstanta untuk performa optimal
Properti | Nilai |
---|---|
ID Aturan | CA1857 |
Judul | Parameter mengharapkan konstanta untuk performa optimal |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 8 | Sebagai peringatan |
Penyebab
Argumen yang tidak valid diteruskan ke parameter yang dianotasi dengan ConstantExpectedAttribute.
Deskripsi aturan
Aturan ini menandai tempat dalam kode Tempat Anda:
- Terapkan metode yang diwariskan yang menggunakan ConstantExpectedAttribute atribut tetapi jangan tandai parameter Anda dengan ConstantExpectedAttribute.
- Teruskan argumen non-konstan ke parameter yang memiliki ConstantExpectedAttribute atribut .
- Teruskan argumen konstanta yang tidak valid ke parameter yang memiliki ConstantExpectedAttribute atribut .
- Teruskan argumen konstan ke parameter yang memiliki ConstantExpectedAttribute atribut , dan argumen berada di luar rentang Min nilai atau Max .
Cara memperbaiki pelanggaran
Koreksi kode Anda seperti yang ditunjukkan oleh pesan kesalahan tertentu yang Anda terima.
Contoh 1 (atribut diharapkan)
Cuplikan kode berikut menunjukkan pelanggaran CA1857:
public interface I1<T>
{
T M1(T operand1, [ConstantExpected] T operand2);
}
public class C1 : I1<int>
{
public int M1(int operand1, int operand2) =>
throw new NotImplementedException();
}
Cuplikan kode berikut memperbaiki pelanggaran:
public interface I1<T>
{
T M1(T operand1, [ConstantExpected] T operand2);
}
public class C1 : I1<int>
{
public int M1(int operand1, [ConstantExpected] int operand2) =>
throw new NotImplementedException();
}
Contoh 2 (konstanta bukan konstanta)
Cuplikan kode berikut menunjukkan pelanggaran CA1857:
static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Cuplikan kode berikut memperbaiki pelanggaran:
static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }
Contoh 3 (konstanta tidak valid)
Cuplikan kode berikut menunjukkan pelanggaran CA1857:
static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }
Cuplikan kode berikut memperbaiki pelanggaran:
static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }
Contoh 4 (konstanta di luar batas)
Cuplikan kode berikut menunjukkan pelanggaran CA1857:
static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Cuplikan kode berikut memperbaiki pelanggaran:
static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini jika performa tidak menjadi perhatian.
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 CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1857.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk