avec Quelle serait l'alternative lorsque vous avez besoin de plus de 64 drapeaux? P> EDIT STRY> P> Désolé, j'ai oublié Pour ajouter cela, une alternative qui fonctionnerait toujours avec Utilisation de Josh Einstein Strong> Suggestion, je suis venu avec cela, ça a du sens? p>
Cela signifie un maximum de 64 drapeaux.
3 Réponses :
Vous pouvez alors passer à l'aide d'un Bitarray . Vous perdrez toutes les "fonctionnalités" d'une énumération telle que la mise en forme de chaîne par défaut et la capacité d'analyse. Un bittharray serait fondamentalement similaire à avoir un groupe de champs booléens, sauf que le stockage est beaucoup plus efficace. P>
En effet, comme le dit Jeff dans les commentaires avec ce nombre de bits indépendants, il semble que c'est une solution erronée de toute façon. Un bitparray peut être beaucoup plus approprié pour votre scénario particulier. P>
Jusqu'à présent, cela semblent être la meilleure alternative, car je ne peux pas vraiment regrouper mon drapeau
Pouvez-vous regarder ma question mise à jour et me dire si c'est ce que vous aviez à l'esprit?
Désolé pour le retard. Vous pouvez utiliser un seul bitarray pour contenir autant de drapeaux que vous le souhaitez. var bits = nouveau bitarray (nouveau Bool [255]); bits.set (50, vrai); bits.get (50); etc ... vous voudriez probablement définir les positions de bits dans un énuméré traditionnel (non drapeaux) qui peut contenir autant de valeurs que son type sous-jacent. En d'autres termes bits.set (myflags.flag50, true);
Que de nombreux drapeaux semblent excessifs et suggéreraient une refonte est nécessaire. Cependant, vous pouvez envisager d'utiliser deux ensembles de drapeaux. Le premier à désigner le "groupe de drapeau" et le second pour désigner les drapeaux de ce groupe. Vous devriez avoir une classe qui a ensuite géré votre "Enum groupé" afin que vous puissiez tester si un drapeau a été défini ou non de manière simple.
struct BigFlags<TGroupEnum, TFlagEnum>
{
private Dictionary<TGroupEnum, TFlagEnum> flags;
public BigFlags(IDictionary<TGroupEnum, TFlagEnum> flags)
{
this.flags = new Dictionary<TGroupEnum, TFlagEnum>(flags);
}
public BigFlags(TGroupEnum group, TFlagEnum flags)
{
this.flags = new Dictionary<TGroupEnum, TFlagEnum>() { { group, flags } };
}
public bool Contains(BigFlags<TGroupEnum, TFlagEnum> flags)
{
// TODO: Compare dictionaries and see if the passed flags are a subset of these flags.
}
// TODO: Equality to check exact match
// TODO: Logical operators and operators for setting/removing flags.
}
Malheureusement, je ne peux pas vraiment les regrouper
@Fredou: Vous risquez peut-être raccrocher la terminologie. "Groupe" n'est qu'un terme que j'ai utilisé, ce que cela est vraiment un moyen d'étendre le nombre de drapeaux que vous pouvez utiliser. Considérez «groupe» pour être la partie haut de gamme de vos drapeaux.
Lorsque vous avez besoin de plus de 64 indicateurs, vous pouvez utiliser la version 128-Flags.
Une refonte? Que de nombreux drapeaux sonnent trop complexes.
Jusqu'à présent, je n'ai que 31 drapeaux, mais je veux juste m'assurer que j'ai un plan de sauvegarde prêt si c'est nécessaire
Yagni vient à l'esprit. Se concentrer sur les problèmes que vous avez.