C#Flag Charlie-Fox

时间:2009-12-13 01:13:16

标签: c# c++ boolean

我一直试图在C#中模仿我在C ++中实现没有任何问题的行为。我有一个基于2的幂的标志集合,以及我需要检查它是否存在于集合中的标志。

  byte flagCollection = 1 | 2 | 4 | 8;
  byte flag = 2;

  if ((flagCollection & flag) != 0) MessageBox.Show("y"); else MessageBox.Show("n");

现在,问题在于无论我将Flag设置为(2,3,100,211),我总是得到“y”,除了0。当然,1,2,4,8会是一些常数在我的申请中有不同的含义。

在C ++中:

if (flagCollection & flag) 

上述变量的结果为TRUE。

3 个答案:

答案 0 :(得分:2)

你这样做的方式似乎是正确的。我不确定你期待的是什么行为。您列出的任何标志(2,3,100,211)都包含1 |的元素2 | 4 | 8.如果你想检查所有是否存在,你应该做

if ((flagCollection & flag) == flag) 
   // ...

答案 1 :(得分:1)

好吧,如果你的旗帜收集已经OR了1,2,4,8,呃是的我认为每个正整数不是16的倍数,而且它会返回一些东西。或者我错过了什么?

答案 2 :(得分:0)

这会有用吗?

[Flag]
public enum flagCollection {
  Type1,
  Type2,
  Type4,
  Type8,
}

flagCollection testValue = flagCollection.Type2

if ((testValue & flagCollection.Type2) == flagCollection.Type2) {
   MessageBox.Show("y");
} else {
   MessageBox.Show("n");
}

不在编译器的前面,如果那样可行,那就不行了。