[Flags]
ile işaretlenmiş bir enum
varsa, .NET'in tek bir değer içerip içermediğini görmek için bu tür bir değeri sınamak için bir yol var mı? Bit sayımı kullanmak istediğim sonucu alabilirim, ancak mümkünse yerleşik işlevleri kullanmayı tercih ederim.Tek bir değer için [Bayraklar] enum değeri testi
enum
değerlerini dinamik olarak döngülerken, Enum.GetValues()
, kombinasyon bayraklarını da döndürür. Aşağıdaki örnekte enum
üzerinde bu işlevi çağırmak 4 değeri döndürür. Ancak, iç algoritmada bulunan kombinasyonları değerini istemiyorum. enum
, enum
'un potansiyel olarak birçok değer içerebileceğinden ve enum
'daki değerler değiştiğinde ek bakım gerektirdiğinden, eşitlik için bireysel enum
değerlerini sınama.
[Flags]
enum MyEnum
{
One = 1,
Two = 2,
Four = 4,
Seven = One | Two | Four,
}
void MyFunction()
{
foreach (MyEnum enumValue in Enum.GetValues(typeof(MyEnum)))
{
if (!_HasSingleValue(enumValue)) continue;
// Guaranteed that enumValue is either One, Two, or Four
}
}
private bool _HasSingleValue(MyEnum value)
{
// ???
}
İlgili: StackOverflow: Enum.IsDefined on combined flags
+1. Kesinlikle en şeffaf teknik olmasa da, kuşkusuz en basit olanıdır. –