我遇到了一个巨大的误解......
我有一个带有字符串组件ID的对象,我试图通过以下方式将此ID与我的代码中的字符串进行比较...
if(object.ID == "8jh0086s)
{
//Execute code
}
然而,在调试时,我可以看到ID实际上是“8jh0086s”,但代码没有被执行。我也试过以下
if(String.Compare(object.ID,"8jh0086s")==0)
{
//Execute code
}
以及
if(object.ID.Equals("8jh0086s"))
{
//Execute code
}
我仍然没有得到任何东西......但是我确实注意到,当我在字符串object.ID中调试'0'时,它没有通过它的线,就像比较字符串中的那条。但我不知道这是否会影响任何事情。它不是字母'o'或'O',它是零但没有通过它的线。
任何想法??
答案 0 :(得分:4)
我怀疑你的一个字符串中有一些不容易出现的东西,比如一个不可打印的字符。
尝试通过这两个字符串运行来查看它们的实际字节值。两个数组都应包含相同的数值。
var test1 = System.Text.Encoding.UTF8.GetBytes(object.ID);
var test2 = System.Text.Encoding.UTF8.GetBytes("8jh0086s");
====从第一条评论更新====
一种非常简单的方法是使用 即时窗口 或 观察声明 来执行这些操作语句并查看结果,而无需修改代码。
答案 1 :(得分:1)
你的第一个例子应该是正确的。 我的猜测是Object.ID中存在未呈现的字符。
您可以通过调试,将两个值复制到Notepad ++等编辑器中并打开查看所有符号来进一步检查。
答案 2 :(得分:1)
我怀疑你回答了自己的问题。如果一个字符串有O而另一个字符串有0,那么它们将进行不同的比较。我一直处于类似的情况,其中字符串似乎相同,但实际上并非如此。最糟糕的情况是,写一个循环来逐个比较每个字符,你可能会发现一些细微的差别。
或者,如果object.ID不是字符串,但可能是“object”类型的东西,那么看看这个: http://blog.coverity.com/2014/01/13/inconsistent-equality
该示例使用int,而不是字符串,但它可以让您在处理不同对象时了解==的复杂性。但我怀疑这不是你的问题,因为你明确调用了String.Compare。这是正确的做法,它告诉你字符串确实不同!