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