C#.NET:if((e.State&ListViewItemStates.Selected)!= 0)< - 这是什么意思?

Run*_*CMD 4 .net c# listview bit-manipulation

在标准的MSN代码中,ListView上有一行 - Ownerdraw - DrawItem:

if ((e.State & ListViewItemStates.Selected) != 0)
{
    //Draw the selected background
}
Run Code Online (Sandbox Code Playgroud)

显然它对状态进行了逐点比较?为什么按位?以下不起作用:

if (e.State == ListViewItemStates.Selected)
{
    //Doesn't work ??
}
Run Code Online (Sandbox Code Playgroud)

为什么这种比较不起作用?它只是一个标准的枚举?我有点困惑..

Dav*_*d M 9

它不是一个标准的枚举 - 它用它装饰FlagsAttribute,使它成为一个位掩码.有关详细信息,请参阅MSDN FlagsAttribute.

第一个示例检查是否设置了任何标志,正如您正确解释的那样.标志通常使用|组合 运算符(虽然+和^对于没有重叠的正确指定的属性也是安全的).