private bool IsContainType(CType uType, CType sType) { return (uType & sType) == sType; } public enum CType { [ProtoEnum(Name = "N", Value = 0)] N = 0, [ProtoEnum(Name = "A", Value = 1)] A = 1, [ProtoEnum(Name = "C", Value = 2)] C = 2, [ProtoEnum(Name = "I", Value = 4)] I = 4 }
判断两个类型是否相同,为什么要写成
return (uType & sType) == sType;就不能直接写相等吗,不是很理解
IsContainType 不是 IsEqual。
CType 允许组合多个值,例如:CType type = CType.A | CType.C。
因此,实现 IsContainType 时使用 (uType & sType) == sType 表达式。
这个方法不是判断uType是否等于sType的。
而是判断uType是否包含sType的。
在.NET 4.0中可以这样写:
uType.HasFlag(sType);
你CType的定义类似按位枚举(N那个枚举值除外),因此当应用方传入CType.A|CType.C时(值为3)时你也应该用位计算判断是否包含你某个枚举值。