比较.NET中的字符串

时间:2014-01-27 22:27:19

标签: c# .net string

我遇到了一个巨大的误解......

我有一个带有字符串组件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',它是零但没有通过它的线。

任何想法??

3 个答案:

答案 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。这是正确的做法,它告诉你字符串确实不同!