Какой из двух приведенных ниже методов вы предпочитаете читать? Есть ли другой (лучший?) Способ проверить, установлен ли флаг?
bool CheckFlag(FooFlag fooFlag)
{
return fooFlag == (this.Foo & fooFlag);
}
И
bool CheckFlag(FooFlag fooFlag)
{
return (this.Foo & fooFlag) != 0;
}





я предпочитаю первый, потому что он более читабельный.
Я предпочитаю первый. Я редко использую! = 0 в логических выражениях.
bool CheckFlag(FooFlag fooFlag)
{
return fooFlag == (this.Foo & fooFlag);
}
bool CheckFlag(FooFlag fooFlag)
{
return (this.Foo & fooFlag) != 0;
}
Я мыслитель позитивно:
bool CheckFlag(FooFlag fooFlag)
{
return this.Foo & fooFlag == 1;
}
Он сказал, что мыслит позитивно :)
Я исправлюсь - подумайте, прежде чем писать;)
Два выражения делают разные вещи (если 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
Спасибо! Думаю, я смотрел на это только с одной стороны. то есть, «Установлен ли мой бит», я думаю, было бы полезно узнать, установлен ли также бит «Любой»!
Что, если значение FooFlag равно 2?