2008-10-15 97 views
6

以下兩種方法中,您更喜歡閱讀哪一種?
是否有另一種(更好的?)的方式來檢查是否設置了標誌?我應該如何檢查標誌枚舉中是否設置了標誌?

bool CheckFlag(FooFlag fooFlag) 
{ 
     return fooFlag == (this.Foo & fooFlag); 
} 

而且

bool CheckFlag(FooFlag fooFlag) 
{ 
     return (this.Foo & fooFlag) != 0; 
} 


請投票了你喜歡的方法。

回答

9

兩個表達式做不同的事情(如果fooFlag有一個以上的位集),所以哪一個更好實際上取決於你想要的行爲:

fooFlag == (this.Foo & fooFlag) // result is true iff all bits in fooFlag are set 


(this.Foo & fooFlag) != 0  // result is true if any bits in fooFlag are set 
3

我更喜歡第一個,因爲它更具可讀性。

1

我更喜歡第一個。我在布爾表達式中謹慎使用!= 0。

6
bool CheckFlag(FooFlag fooFlag) 
{ 
    return fooFlag == (this.Foo & fooFlag); 
} 
2
bool CheckFlag(FooFlag fooFlag) 
{ 
    return (this.Foo & fooFlag) != 0; 
} 
-2

我是一個積極的思考者:

bool CheckFlag(FooFlag fooFlag) 
{ 
    return this.Foo & fooFlag == 1; 
} 
+1

如果FooFlag的值是2會怎麼樣? – 2008-10-15 13:39:54

+0

他說他是一個積極的思想家:) – leppie 2008-10-15 13:42:07