我在 Windows Mobile 6.5 上将 C# 3.5 用于移动应用程序,我一直在使用这个简单的代码,但它突然停止工作:
//Regroup the issues
ScanIssuesEnum NewIssues = 0;
NewIssues |= Direction1Issues;
NewIssues |= Direction2Issues;
//Remove invalid directions because we don't care about them in bidirectionnal mode
NewIssues ^= ScanIssuesEnum.InvalidDirectionIssue;
return NewIssues;
我彻底检查了我的所有类型,以确保我没有使用其他类型,所有内容都基于相同的 ScanIssuesEnum 类型,并且该类型是 [Flag] 的,如下所示:
[Flags] public enum ScanIssuesEnum
{
TicketUsedTooSoonIssue = 1,
TicketUsedTooLateIssue = 2,
TicketUsageBustedIssue = 4,
InvalidTripIssue = 8,
InvalidDirectionIssue = 16,
StartStopTooSoonIssue = 32,
StartStopNotFoundIssue = 64,
EndStopTooLateIssue = 128,
EndStopNotFoundIssue = 256,
MultipleUsageSameTripIssue = 512,
MultipleUsageInFewHoursIssue = 1024,
StudentTicketIssue = 2048,
ConnectingTripWithinTimeframeFlag = 4096,
UDESStudentTicketIssue = 8192,
}
在我当前的问题中,我可以在两个 DirectionIssues 中看到 EndStopNotFoundIssue,当组合成 NewIssues 时,我得到一个包含两倍 EndStopNotFoundIssue 的值。我认为在我返回值之前并不重要,也许这只是一个视觉 IDE 错误,但不,问题仍然存在。更糟糕的是,当我点击删除 InvalidDirectionIssue 标志的行时,它会将其添加到 NewIssues ...
我疯了吗?^= 相当于 x = x ^ y 不是吗?所以我应该删除标志,而不是添加它吗?
谢谢
编辑 #1 - DirectionIssues 的值
根据 Wonko 的要求,Direction1Issue 和 Direction2Issue 的值都是 EndStopNotFoundIssue 或 256。
在“NewIssues ^= ScanIssuesEnum.InvalidDirectionIssue;”行之后 我的新问题由“EndStopNotFoundIssue | EndStopNotFoundIssue | InvalidDirectionIssue”组成。显然它不应该!
编辑 #2 - DirectionIssues 的值被错误读取
哈,两个 DirectionIssues 有不同的值,我只是读错了。实际上是 EndStopNotFoundIssue 和 EndStopTooLateIssue。该死的头脑没有读完整个单词嘿嘿。所以 OR 部分很好,是我的大脑在欺骗我。
我更改了关于 InvalidDirectionIssue 的有问题的部分,我试图使用“x = x & ~y”形式进行异或运算,并且它有效,不知道为什么它有效,而“x ^= y”却没有,但地狱!找到解决方案!