CA1028: Penyimpanan enum harus Int32
Properti | Nilai |
---|---|
ID Aturan | CA1028 |
Judul | Penyimpanan Enum harus Int32 |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Jenis enumerasi yang mendasar bukan System.Int32.
Secara default, aturan ini hanya melihat enumerasi yang terlihat secara eksternal, tetapi ini dapat dikonfigurasi.
Deskripsi aturan
Enumerasi adalah jenis nilai yang menentukan sekumpulan konstanta bernama terkait. Secara default, System.Int32 jenis data digunakan untuk menyimpan nilai konstanta. Meskipun Anda dapat mengubah jenis yang mendasarinya, itu tidak diperlukan atau direkomendasikan untuk sebagian besar skenario. Tidak ada perolehan performa yang signifikan yang dicapai dengan menggunakan jenis data yang lebih kecil dari Int32. Jika Anda tidak dapat menggunakan jenis data default, Anda harus menggunakan salah satu jenis integral yang mematuhi Common Language System (CLS), , Byte, Int16Int32, atau Int64 untuk memastikan bahwa semua nilai enumerasi dapat diwakili dalam bahasa pemrograman yang mematuhi CLS.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, kecuali ada masalah ukuran atau kompatibilitas, gunakan Int32. Untuk situasi di mana Int32 tidak cukup besar untuk menyimpan nilai, gunakan Int64. Jika kompatibilitas mundur memerlukan jenis data yang lebih kecil, gunakan Byte atau Int16.
Kapan harus menekan peringatan
Tekan peringatan dari aturan ini hanya jika masalah kompatibilitas mundur memerlukannya. Dalam aplikasi, kegagalan untuk mematuhi aturan ini biasanya tidak menyebabkan masalah. Di pustaka, di mana interoperabilitas bahasa diperlukan, kegagalan untuk mematuhi aturan ini mungkin berdampak buruk pada pengguna 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 CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.
Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku untuknya, atau untuk semua aturan dalam kategori ini (Desain) yang berlaku untuk aturan ini. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.
Menyertakan permukaan API tertentu
Anda dapat mengonfigurasi bagian basis kode mana yang akan dijalankan aturan ini, berdasarkan aksesibilitasnya, dengan mengatur opsi api_surface. Misalnya, untuk menentukan bahwa aturan hanya boleh dijalankan pada permukaan API non-publik, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Nota
Ganti bagian XXXX
CAXXXX
dengan ID aturan yang berlaku.
Contoh
Contoh berikut menunjukkan dua enumerasi yang tidak menggunakan jenis data yang mendasar yang direkomendasikan.
[Flags]
public enum Days : uint
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : sbyte
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As UInteger
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As SByte
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
Contoh berikut memperbaiki pelanggaran sebelumnya dengan mengubah jenis data yang mendasar menjadi Int32.
[Flags]
public enum Days : int
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : int
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As Integer
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As Integer
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
Aturan terkait
- CA1008: Enum harus memiliki nilai nol
- CA1027: Tandai enum dengan FlagsAttribute
- CA2217: Jangan tandai enum dengan FlagsAttribute
- CA1700: Jangan beri nama nilai enum 'Reserved'
- CA1712: Jangan awali nilai enum dengan nama jenis