首页 新闻 会员 周边

性能优化问题

0
悬赏园豆:5 [已解决问题] 解决于 2016-04-22 17:56
        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;就不能直接写相等吗,不是很理解
不要问我从哪里来123的主页 不要问我从哪里来123 | 初学一级 | 园豆:6
提问于:2016-04-22 11:16
< >
分享
最佳答案
1

 

IsContainType 不是 IsEqual。

CType 允许组合多个值,例如:CType type = CType.A | CType.C。

因此,实现 IsContainType 时使用 (uType & sType) == sType 表达式。

收获园豆:3
Launcher | 高人七级 |园豆:45045 | 2016-04-22 11:49
其他回答(2)
0

这个方法不是判断uType是否等于sType的。

而是判断uType是否包含sType的。

在.NET 4.0中可以这样写:

uType.HasFlag(sType);

 

收获园豆:1
写代码的小2B | 园豆:4371 (老鸟四级) | 2016-04-22 11:55
-1

你CType的定义类似按位枚举(N那个枚举值除外),因此当应用方传入CType.A|CType.C时(值为3)时你也应该用位计算判断是否包含你某个枚举值。

收获园豆:1
Daniel Cai | 园豆:10424 (专家六级) | 2016-04-22 16:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册