CA2217: Enum'ları FlagsAttribute ile işaretlemeyin

Özellik Değer
Kural Kimliği CA2217
Başlık Sabitleri FlagsAttribute ile işaretlemeyin
Kategori Kullanım
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

Neden

Bir numaralandırma FlagsAttribute ile işaretlenir ve iki veya diğer tanımlı değerlerin birleşimi olmayan bir veya daha fazla değere sahiptir.

Varsayılan olarak, bu kural yalnızca dışarıdan görünen numaralandırmalara bakar, ancak bu yapılandırılabilir.

Kural açıklaması

Numaralandırmanın yalnızca, numaralandırmada tanımlanan her değerin iki kuvveti veya tanımlı değerlerin bir bileşimi olduğu durumda FlagsAttribute mevcut olmalıdır.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için numaralandırmadan kaldırın FlagsAttribute .

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan uyarıyı bastırmayın.

Kod çözümleme için konfigüre et

Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.

Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Kullanım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.

Belirli API yüzeylerini ekleme

api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Not

XXXX CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.

Örnekler

Aşağıdaki kod, Color3 değerini içeren bir numaralandırmayı gösterir. 3, iki güç veya tanımlı değerlerden herhangi birinin birleşimi değildir. Numaralandırma Color ile FlagsAttributeişaretlenmemelidir.

// Violates this rule    
[FlagsAttribute]
public enum Color
{
    None = 0,
    Red = 1,
    Orange = 3,
    Yellow = 4
}
Imports System

Namespace Samples

    ' Violates this rule    
    <FlagsAttribute()> _
    Public Enum Color

        None = 0
        Red = 1
        Orange = 3
        Yellow = 4

    End Enum
End Namespace

Aşağıdaki kod, Daysile FlagsAttributeişaretlenme gereksinimlerini karşılayan bir numaralandırmayı gösterir:

[FlagsAttribute]
public enum Days
{
    None = 0,
    Monday = 1,
    Tuesday = 2,
    Wednesday = 4,
    Thursday = 8,
    Friday = 16,
    All = Monday | Tuesday | Wednesday | Thursday | Friday
}
Imports System
Namespace Samples

    <FlagsAttribute()> _
    Public Enum Days

        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday

    End Enum
End Namespace

CA1027: Sabit listeleri FlagsAttribute ile işaretleyin

Ayrıca bkz.