本帖最后由 bdmh 于 2014-01-12 21:52:02 编辑

解决方案 »

  1.   

    注意,前提是有[Flags]这个attribute
      

  2.   

    http://msdn.microsoft.com/zh-cn/library/system.enum.hasflag.aspx
    位与位或的应用,以前没注意到[Flags]的写法,都是自己手写的位运算判断,学习了;DinnerItems myOrderA = DinnerItems.Appetizer | DinnerItems.Entree | DinnerItems.Beverage | DinnerItems.Dessert=二进制1111

    DinnerItems myOrderB = DinnerItems.Appetizer | DinnerItems.Entree=二进制0011
    bool a = (myOrderA & myOrderB) == myOrderB; // 1111&0011 = 0011
    bool b = myOrderA.HasFlag(myOrderB);
    所以HasFlag应该就是进行了的位与运算,用Reflactor看了一下,没找到真正的位运算部分,调用了系统的InternalHasFlag方法实现的,这样应该比自己再写那些位与位或效率更高吧
      

  3.   

    总结:
    1 当使用Enum.HasFlag(flag)时应使用了attribute ,否则有可能出现程序功能上的错误。
    2 当使用Enum.HasFlag(flag),其flag的基础值为零时,则方法将返回 true.
    3 可以使用 .Equals() 方法测试flag是否与零相等,并只在 flag 的值非零时调用 HasFlag().