我认为这应该没问题
bool prefMatch = false;
// Is the frequency the same?
prefMatch = string.Compare(user.Frequency, pref.Action.ToString()) == 0;
所以如果user.Frequency是“3”并且pref.Action.ToString()是“3”那么它应该将prefMatch设置为true吗?我变得虚假,我肯定在VS 2008的手表标签中检查了2个值,只是为了确保它们是相同的
答案 0 :(得分:5)
您可以使用==
prefMath = (user.Frequency == pref.Action.ToString());
虽然string.Compare
也可以使用。我建议其他地方有问题。
- 编辑
另外,为了完整性,没有必要为某个东西分配变量,然后再将其直接分配。这样做有点令人困惑,所以最好将其保留为未分配状态,或者将其全部分配到一个位置。这样,如果您遇到没有像您想象的那样分配的情况,编译器可以帮助您。显然,如果您将第二个作业包装在try/catch
中,则首先分配。
答案 1 :(得分:2)
在这样的情况下,有时很容易将责任归咎于第三方代码,就像你在这里所做的那样。有时,这是合理的 - 但不是在这里。 String.Compare是.NET Framework的核心,经过严格测试的核心部分。这并没有失败。我保证。
我发现在这些情况下有用的是隔离故障。编写一个小型的,独立的测试用例,试图证明问题。用尽可能少的依赖关系写它。如果可能,使其成为独立的控制台应用程序。发布在这里。如果我们可以接受它,编译并运行它,并重现问题,我们可以帮助您。不过,我敢打赌,在创建这个测试用例的过程中,你会遇到一个令人头疼的时刻 - “当然!” - 并意识到问题所在。
答案 2 :(得分:0)
也许字符串包含不可打印的字符? 要检查,我会做类似的事情:
byte[] b1 = System.Text.Encoding.UTF8.GetBytes(user.Frequency);
byte[] b2 = System.Text.Encoding.UTF8.GetBytes(pref.Action.ToString());
然后比较b1和b2的内容。