Why String.Equals is returning false?

本小妞迷上赌 提交于 2019-11-28 09:41:01

CompareTo ignores certain characters:

static void Main(string[] args)
{
    var a = "asdas"+(char)847;//add a hidden character
    var b = "asdas";
    Console.WriteLine(a.Equals(b)); //false
    Console.WriteLine(a.CompareTo(b)); //0
    Console.WriteLine(a.Length); //6
    Console.WriteLine(b.Length); //5

   //watch window shows both a and b as "asdas"
}

(Here, the character added to a is U+034F, Combining Grapheme Joiner.)

So CompareTo's result is not a good indicator of a bug in Equals. The most likely reason of your problem is hidden characters. You can check the lengths to be sure.

See this for more info.

You may wish to try using an overload of String.Equals that accepts a parameter of type StringComparison.

For example:

myCert.Thumbprint.Equals(certificateThumbprint, StringComparison.[SomeEnumeration])


Where [SomeEnumeration] is replaced with one of the following enumerated constants:

 - CurrentCulture
 - CurrentCultureIgnoreCase
 - InvariantCulture
 - InvariantCultureIgnoreCase
 - Ordinal
 - OrdinalIgnoreCase


Reference the MSDN Documentation found here.

Sometimes when we insert data in database it stores some spaces like "question ". And when you will try to compare it with "question" it returns false. So my suggestion is: please check the value in database or use Trim() method.

In your case, please try: mycert.Thumbprint != null && mycert.Thumbprint.trim().equals(certificateThumbprint.trim())

I think it will return true if any record will exist.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!