J'ai deux drapeaux:Enum comme drapeau à l'aide, le réglage et décalage
[Flags]
enum Flags
{
A = 1,
B = 2
};
Je les mets comme ceci:
Mode = Flags.A | Flags.B; // default value
for(int i = 0; i < args.Length; i++) {
switch(args[i])
{
case "--a":
{
if ((Mode & Flags.A) == Flags.A && (Mode & Flags.B) == Flags.B)
// both, default assume
{
Mode = Flags.A; // only A
}
else
{
Mode |= Flags.A; // append A
}
break;
}
case "--b":
{
if ((Mode & Flags.A) == Flags.A && (Mode & Flags.B) == Mode.B)
{
Mode = Flags.B;
}
else
{
Mode |= Flags.B;
}
break;
}
} }
et les utiliser par la suite comme ceci:
if((Mode & Flags.A) == Flags.A)
{
//
}
if((Mode & Flags.B) == Flags.B)
{
//
}
Réserve majeure: Les deux drapeaux peuvent être définis. Ou juste un, dans ce cas, une seule partie du code est exécutée.
Est-ce que mon code est bon? Quelle est la meilleure façon de configurer les drapeaux?
Mise à jour: Est-ce moins moche que d'abord, comment pensez-vous?
Mode = 0; // default value now is empty
for(int i = 0; i < args.Length; i++) {
switch(args[i])
{
case "--a":
{
Mode |= Flags.A;
break;
}
case "--b":
{
Mode |= Flags.B;
break;
}
} }
if(Mode == 0)
{
Mode = Flags.A | Flags.B; // if no parameters are given, setup both flags
}
Votre code est syntaxiquement correct mais il est difficile de dire si c'est "bon" sans comprendre votre problème un peu plus. Votre question est un peu vague et vos commentaires sur les réponses le font plus. Pouvez-vous donner un peu plus? À première vue, votre solution est trop complexe pour le problème tel que présenté. – Simon
Salut. Il y a la valeur par défaut A | B. Si le paramètre -a est donné en mode de réglage uniquement à A, si -b seulement à B, et si les deux sont donnés à (par défaut) A | B. Quelle est la meilleure façon de vérifier que la valeur actuelle est la valeur par défaut (A | B) pour la changer en A ou B si nécessaire. – abatishchev