CA1700: Numaralandırma değerlerini 'Rezerve' olarak adlandırmayın

Özellik Değer
Kural Kimliği CA1700
Başlık Sabit listesi değerlerini 'Rezerve' olarak adlandırmayın
Kategori Adlandırma
Düzeltme bozucu ya da bozmayan olabilir Son Dakika
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

Neden

Enumerasyon üyesinin adı "ayrılmış" sözcüğünü içerir.

Kural açıklaması

Bu kural, adında "ayrılmış" kelimesi bulunan bir numaralandırma üyesinin şu anda kullanılmadığını, ancak gelecekte yeniden adlandırılacak veya kaldırılacak bir yer tutucu olduğunu varsayar. Bir üyenin yeniden adlandırılması veya kaldırılması uyumsuzluk oluşturan bir değişikliktir. Kullanıcıların sadece adında "rezerve edilmiş" ifadesi yer alıyor diye üyeyi yoksaymasını beklememelisiniz. Ayrıca kullanıcıların belgeleri okuyup buna göre hareket etmesine güvenemezsiniz. Ayrıca, ayrılmış üyeler nesne tarayıcılarında ve akıllı tümleşik geliştirme ortamlarında göründüğü için, gerçekte hangi üyelerin kullanıldığı konusunda karışıklığa neden olabilirler.

Ayrılmış üye kullanmak yerine, gelecek sürümde numaralandırmaya yeni bir üye ekleyin. Çoğu durumda, özgün üyelerin değerlerinin değişmesine neden olmadığı sürece yeni üyenin eklenmesi bozucu bir değişiklik değildir.

Sınırlı sayıda durumda, özgün üyeler özgün değerlerini korusa bile bir üyenin eklenmesi uyumsuzluk yaratan bir değişiklik olabilir. Öncelikle, yeni üye, tüm üye listesini kapsayan ve varsayılan durumda bir özel durum oluşturan dönüş değeri üzerinde switch (Visual Basic'te Select) deyimini kullanan arayanları aksatmadan mevcut kod yollarından döndürülemez. İkincil bir sorun, istemci kodunun gibi System.Enum.IsDefinedyansıma yöntemlerinden gelen davranış değişikliğini işleyememesidir. Buna göre, yeni üyenin mevcut yöntemlerden döndürülması gerekiyorsa veya bilinen bir uygulama uyumsuzluğu düşük yansıma kullanımı nedeniyle oluşursa, tek bölünemez çözüm şunlardır:

  1. Özgün ve yeni üyeleri içeren yeni bir numaralandırma ekleyin.

  2. Özgün numaralandırmayı System.ObsoleteAttribute özelliğiyle işaretleyin.

    Harici olarak görünen türler veya üyeler ve özgün numaralandırmayı sunanlar için aynı prosedürü izleyin.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için üyeyi kaldırın veya yeniden adlandırın.

Example

// This enum violates the rule.
public enum BadPaymentStatus
{
    Pending = 0,
    Completed = 1,
    ReservedError = 2,
    Reserved = 3,
}

// This enum satisfies the rule.
public enum GoodPaymentStatus
{
    Pending = 0,
    Completed = 1,
    Error = 2,
    Unknown = 3,
}

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

Şu anda kullanılan bir üye veya daha önce gönderilen kitaplıklar için bu kuraldan gelen bir uyarıyı gizlemeniz güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

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 (Adlandırma) 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.

CA2217: Sabit listeleri FlagsAttribute ile etiketlemeyin

CA1712: Enum değerlerini tür adıyla önek kullanmayın

CA1028: Numaralandırma depolaması Int32 olmalıdır

CA1008: Enum'lar sıfır değerine sahip olmalıdır

CA1027: Sabit listeleri FlagsAttribute ile işaretleyin