Si j'ai un Lorsque vous bougeez dans le Enum code> qui est marqué avec
[indicateurs] code>, existe-t-il un moyen de tester une valeur de ce type pour voir si elle ne contient que valeur unique? Je peux obtenir le résultat que je veux utiliser un bit-comptage, mais je préférerais utiliser des fonctions intégrées si possible.
Enum code> valeurs de manière dynamique,
Enum.getvalues ( ) code> retourne aussi les drapeaux combinés. Appelant cette fonction sur le
Enum code> dans l'exemple suivant renvoie 4 valeurs. Cependant, je ne veux pas que la valeur combinaisons em> incluse dans l'algorithme interne. Test individuel
Enum code> pour l'égalité est sorti, car le
Enum code> pourrait potentiellement contenir de nombreuses valeurs, et nécessite également une maintenance supplémentaire lorsque les valeurs du
Enum code > Changement. P>
[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)
{
// ???
}
3 Réponses :
Vous pouvez le jeter à int code> et utiliser les techniques de BIG TwidDling Hacks Pour vérifier s'il s'agit d'une puissance de deux.
+1. Bien que définitivement la technique la plus transparente, c'est sans aucun doute le plus simple.
Vous pouvez utiliser une combinaison de ISdefinefinine code> et de vérifier les pouvoirs de 2. p>
Dans l'exemple que j'ai écrit, est défini code> évaluerait toujours à
vrai code>.
Vous pourriez que vous pourriez vous enumber.getvalues et ne comptez que les articles qui sont une puissance de 2 (uniformément divisible par 2 sans reste). P>