【发布时间】:2011-11-15 23:09:31
【问题描述】:
我一定在做一些非常愚蠢的事情,但我看不出是什么。在我有一个简单的控制台应用程序中;
[Flags]
public enum ConsoleStates : byte
{
TopLevel,
All,
MainMenu,
SingleLeagueSelected,
}
然后
public class Program
{
static void Main(string[] args)
{
Program p = new Program();
p.StartUp(args);
}
private bool CheckFlag(ConsoleStates targetVal, ConsoleStates checkVal)
{
return ((targetVal & checkVal) == checkVal);
}
private void StartUp(string[] args)
{
int x = 0;
ConsoleStates states = (ConsoleStates.All | ConsoleStates.MainMenu);
if (CheckFlag(states, ConsoleStates.SingleLeagueSelected))
{
x++;
}
}
}
我的问题 X 最后应该为零,但始终为 1。据我了解,它应该做一些明智的 AND 操作并检查是否有 singleleagueSelected 并返回 false。
这很奇怪,我所有的谷歌搜索都说这很简单而且很有效,但对于我的生活,我无法得到它。 /羞愧地垂下头。
【问题讨论】:
-
“羞愧地垂头丧气”......你也应该这样做。如果您只是尝试过,那么使用调试器很容易找到这个问题。所以不应该替换调试器,当你尝试单步执行但仍然卡住时问一个问题。
-
@BenVoigt 我确实反复尝试调试器并逐步了解正在发生的事情。不要做假设!
标签: c# enums bitwise-operators bitwise-and