【发布时间】:2010-10-09 13:18:58
【问题描述】:
我有两个标志:
[Flags]
enum Flags
{
A = 1,
B = 2
};
我是这样设置的:
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;
}
} }
然后像这样使用它们:
if((Mode & Flags.A) == Flags.A)
{
//
}
if((Mode & Flags.B) == Flags.B)
{
//
}
主要保留:两个标志都可以设置。或者只是一个,在这种情况下只执行一部分代码。
我的代码好吗?设置标志的最佳方法是什么?
更新: 是不是先不那么丑了,你怎么看?
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
}
【问题讨论】:
-
您的代码在语法上是正确的,但如果不进一步了解您的问题,就很难说它是否“好”。您的问题有点含糊,而您的回答问题则更加模糊。你能多给一点吗?从表面上看,您的解决方案对于所提出的问题来说太复杂了。
-
嗨。有默认值 A|B。如果参数--a 只给A 设置模式,如果--b 只给B,并且如果两者都给(默认情况下)A|B。最好的检查方法是当前值是默认值 (A|B),如果需要,可以将其更改为 A 或 B。