我读了一些脚本,似乎很难理解。希望有人能解释原因 第一个:
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; 发生了什么?作家错了或者错过了一些基本知识。 如果你知道,请帮助我。感谢
答案 0 :(得分:8)
这意味着BonusType
是一个标志类型枚举,其中可以使用按位运算组合多个值。
(bt & BonusType.DestroyWholeRowColumn) == BonusType.DestroyWholeRowColumn
表示我们正在检查是否在bt变量上设置了DestroyWholeRowColumn
标志。
我们也可以使用Enum.HasFlag方法检查枚举标记,但它只能从.Net 4开始。
检查this answer以获取有关标记类型枚举的更多信息。
答案 1 :(得分:1)
第1个问题
a == b
正在测试a
和b
是否相同。
(a & b) == b
,a
是位掩码(包含多个位值),并检查位b
是否已打开。