Si j'ai un enum
marqué [Flags]
, existe-t-il un moyen de tester une valeur de ce type dans .NET pour voir s'il ne contient qu'une seule valeur? Je peux obtenir le résultat que je veux en utilisant le comptage de bits, mais je préfère utiliser des fonctions intégrées si possible.Test d'une valeur d'énumération [Flags] pour une seule valeur
Lors de la mise en boucle dynamique des valeurs enum
, Enum.GetValues()
renvoie également les indicateurs de combinaison. L'appel de cette fonction sur enum
dans l'exemple suivant renvoie 4 valeurs. Cependant, je ne veux pas la valeur combinaisons inclus dans l'algorithme interne. Le test des valeurs enum
individuelles pour l'égalité est désactivé, car le enum
peut potentiellement contenir de nombreuses valeurs et nécessite également une maintenance supplémentaire lorsque les valeurs du enum
changent.
[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)
{
// ???
}
connexes: StackOverflow: Enum.IsDefined on combined flags
+1. Bien que certainement pas la technique la plus transparente, c'est sans doute la plus simple. –