Aracılığıyla paylaş


CA1027: Numaralandırmaları FlagsAttribute ile işaretle

TürAdı

MarkEnumsWithFlags

CheckId

CA1027

Kategori

Microsoft.Design

Bozan Değişiklik

Bozmayan

Sebep

Ortak sayım değerleri ikinin kuvvetleri veya sayımda tanımlanan diğer değerlerin ve şimdi geçerli olmayan FlagsAttribute özniteliğinin kombinasyonudur.Yanlış pozitifleri azaltmak için, bu kural bitişik değerlere sahip sayımların ihlallerini raporlamaz.

Kural Tanımı

Bir numaralandırma ilişkili adlandırılmış sabitler kümesini tanımlayan değer türüdür.Anlamsız olarak birleştirildiğinde numaralandırmaya FlagsAttribute 'ü uygulayın.Örneğin, uygulamada hangi günlerin kaynaklarının kullanılabilir olduğunu takip etmek için haftanın günlerini içeren bir numaralandırma düşünün.Eğer her kaynağın FlagsAttribute 'e sahip olan kodlanmış numaralandırma kullanımı varsa günlerin her kombinasyonu temsil edilir.Özniyeliği olmadan, sadece haftanın bir günü temsil edilebilir.

Kombinasyonlanabilir numaralandırmaları tutabilen alanlar için ayrı ayrı numaralandırma değerleri alan içinde bit grupları olarak kabul edilir.Bu nedenle, bu tür alanlar bit alanları olarak adlandırılır.Bir bit alanı içerisinde birleştirilmiş numaralandırma değerlerini saklamak için, Boolean koşul operatörlerini kullanın.Bir bit alanını belirli bir geçerli değeriyle test etmek için, Boolean mantıksal operatörlerini kullanın.Birleştirilmiş numaralandırma değerlerini bit alanlarında saklamak ve değerleri doğru almak için, numaralandırmada belirtilen herbir değer ikinin katı olmak zorundadır.Bu şekilde olmadığı sürece, Boolean mantıksal operatörleri alanda saklanan tekil numaralandırma değerlerini çıkaramaz.

İhlallerin Düzeltilmesi

Bu kuralı ihlal düzeltmek için numaralandırmaya FlagsAttribute ekleyin.

Uyarılar Ne Zaman Bastırılmalı

Numaralandırma değerlerinin birleştirilebilir olmasını istemiyorsanız, bu kuralı bastırın.

Örnek

Aşağıdaki örnekte, DaysEnumNeedsFlagsFlagsAttribute kullanma gereksinimlerini karşılıyor fakat ona sahip değil.ColorEnumShouldNotHaveFlag numaralandırması ikinin kuvvetleri olan değerlere sahip değil fakat yanlışlıkla FlagsAttribute belirtir.Bu CA2217: Numaralandırmaları FlagsAttribute ile işaretlemeyin kuralını ihlal eder.

using System;

namespace DesignLibrary
{
// Violates rule: MarkEnumsWithFlags. 

   public enum DaysEnumNeedsFlags 
   {
      None        = 0,
      Monday      = 1,
      Tuesday     = 2,
      Wednesday   = 4,
      Thursday    = 8,
      Friday      = 16,
      All         = Monday| Tuesday | Wednesday | Thursday | Friday
   }
   // Violates rule: DoNotMarkEnumsWithFlags.
   [FlagsAttribute]
   public enum ColorEnumShouldNotHaveFlag 
   {
      None        = 0,
      Red         = 1,
      Orange      = 3,
      Yellow      = 4
   }
}

İlgili Kurallar

CA2217: Numaralandırmaları FlagsAttribute ile işaretlemeyin

Ayrıca bkz.

Başvuru

FlagsAttribute