Bagikan melalui


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 8 Tidak

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 mana dari basis kode yang akan menjalankan aturan ini, berdasarkan aksesibilitasnya. 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

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

Baca juga