我有兩個標誌:枚舉作爲國旗使用,設置和轉移
[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)
{
//
}
主要預訂:可能會設置兩個標誌。或者只有一個,在這種情況下,只執行一部分代碼。
我的代碼好嗎?什麼是設置標誌的最佳方式?
Upd: 這是不是那麼醜陋,那麼首先,你怎麼看?
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
}
您的代碼在語法上是正確的,但很難說它是否「好」,而不理解您的問題多一點。你的問題有點含糊,你對答案的評論更是如此。你能再多付一點嗎?表面上你的解決方案對於所提出的問題來說太複雜了。 – Simon 2009-02-24 12:48:08
嗨。有默認值A | B。如果參數-a僅設置爲A的設置模式,如果--b僅限於B,並且兩者都設置爲(默認)A | B。什麼是最好的檢查方法是當前值是默認值(A | B),如果需要將其更改爲A或B. – abatishchev 2009-02-24 13:25:06