a == b和(a& b)== b

时间:2015-09-03 08:37:53

标签: c# boolean-operations

我读了一些脚本,似乎很难理解。希望有人能解释原因 第一个:

public static bool ContainsDestroyWholeRowColumn(BonusType bt)
    {
        return (bt & BonusType.DestroyWholeRowColumn) 
            == BonusType.DestroyWholeRowColumn;
    }

为什么不写bt.Equal(BonusType.DestroyWholeRowColumn)bt == BonusType.DestroyWhoeRowColumn? 第二:

public bool IsSameType(Shape otherShape)
    {
        if (otherShape == null || !(otherShape is Shape))// check otherShape is not null and it is Shape
            throw new ArgumentException("otherShape");

        return string.Compare(this.Type, (otherShape as Shape).Type) == 0;
    }

如果输入法不是正确的类型。我认为它会立即警觉,为什么他们还需要检查对象的类型 最后一个:

//if we are in the middle of the calculations/loops
            //and we have less than 3 matches, return a random one
            if(row >= Constants.Rows / 2 && matches.Count > 0 && matches.Count <=2)
                return matches[UnityEngine.Random.Range(0, matches.Count - 1)];

我认为这些代码总是返回0; 发生了什么?作家错了或者错过了一些基本知识。 如果你知道,请帮助我。感谢

2 个答案:

答案 0 :(得分:8)

这意味着BonusType是一个标志类型枚举,其中可以使用按位运算组合多个值。

(bt & BonusType.DestroyWholeRowColumn) == BonusType.DestroyWholeRowColumn表示我们正在检查是否在bt变量上设置了DestroyWholeRowColumn标志。

我们也可以使用Enum.HasFlag方法检查枚举标记,但它只能从.Net 4开始。

检查this answer以获取有关标记类型枚举的更多信息。

答案 1 :(得分:1)

第1个问题

a == b正在测试ab是否相同。 (a & b) == ba是位掩码(包含多个位值),并检查位b是否已打开。