2009-09-09 64 views
0

我假定这应该是细字符串比较设置为布尔变量

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设置为真的对吗?我越来越假,我肯定检查了在VS 2008腕表选项卡中的2个值只是要确定它们是相同的

+5

'String.Compare'不破。 :) – 2009-09-09 04:01:42

+0

我实际上有一个不同的价值被比较比我想象的。工作正常。 – PositiveGuy 2009-09-10 00:16:36

回答

5

你可以使用==

prefMath = (user.Frequency == pref.Action.ToString()); 

虽然string.Compare也将工作。我建议其他地方有一个问题。

- 编辑

而且,只是为了完整,没有点分配到的东西一个变量,然后直接后重新分配它。这样做有点令人困惑,所以最好不要分配它,或者将它全部分配到一个地方。这样编译器可以帮助你,如果你有一个情况,它不会像你想象的那样分配。如果您在try/catch包住第二次分配,虽然这是很明显的,可接受的指配第一。

2

在类似这种情况下,它有时很诱人的第三方代码指向矛头,因为你已经在这里完成。有时候,这是有道理的 - 但不在这里。 String.Compare是.NET框架的核心,经过非常严格测试。这并不是失败。我保证。

我发现了什么在这些情况下是有帮助的隔离故障。编写一个小型自包含的测试用例,试图展示问题。用尽可能少的依赖性编写它。如果可能的话,使其成为独立的控制台应用程序。张贴在这里。如果我们能够接受它,编译并运行它,并重现问题,我们可以为您提供帮助。不过,我敢打赌,在创建这个测试案例的过程中,你会经历一次头部拍打的时刻 - “当然!” - 并意识到问题所在。

0

也许字符串(S)含有不可打印字符? 要检查,我会做一些事情,如:

byte[] b1 = System.Text.Encoding.UTF8.GetBytes(user.Frequency); 
byte[] b2 = System.Text.Encoding.UTF8.GetBytes(pref.Action.ToString()); 

然后比较的B1和B2内容。