且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

HasFlags始终返回枚举无(0)值为true

更新时间:2023-01-14 11:57:44

HasFlag 有效的是这样的:

  HasFlag =(GivenFlag&安培;价值)== GivenFlag; 

//万能,0 == 0 - >总是如此


This is the enum definition:

[Flags]
enum Animals
{
    None = 0,
    Dog = 1,
    Cat = 2,
    Horse = 4,
    Zebra = 8,
}

Now, given the following code, why does the HasFlag method return true for the value Animals.None?

Animals myAnimals = Animals.Dog | Animals.Horse;

var hasNone = myAnimals.HasFlag(Animals.None);    //true! Why?
var hasCat = myAnimals.HasFlag(Animals.Cat);      //false
var hasDog = myAnimals.HasFlag(Animals.Dog);      //true
var hasHorse = myAnimals.HasFlag(Animals.Horse);  //true
var hasZebra = myAnimals.HasFlag(Animals.Zebra);  //false

HasFlag is effectively this:

HasFlag = (GivenFlag & Value) == GivenFlag;

//"Anything" AND 0 == 0  --> always true