C#String.Equals在相同的字符串上返回false

C#String.Equals在相同的字符串上返回false,c#,string,compare,equals-operator,C#,String,Compare,Equals Operator,我正在做一个项目,其中一部分我需要比较两个字符串。 我的问题是,每当我尝试比较它们时,总是得到false(==,.Equals(),String.Equals()-它们都返回false,即使我有两个完全相同的字符串) 这是我代码的一部分 var tagType = JObject.Parse(json).First.First.ToString(); foreach (var type in assembly.ExportedTypes) { var name = tagType;

我正在做一个项目,其中一部分我需要比较两个字符串。 我的问题是,每当我尝试比较它们时,总是得到false
(==,.Equals(),String.Equals()
-它们都返回false,即使我有两个完全相同的字符串)

这是我代码的一部分

var tagType = JObject.Parse(json).First.First.ToString();
foreach (var type in assembly.ExportedTypes)
{
    var name = tagType;
    var currentType = type.Name;

    var a = name.Length;
    var b = currentType.Length;

    var result = currentType == name;
    var result1 = currentType.Equals(name);
    var result2 = String.Equals(name, currentType, StringComparison.CurrentCulture);
    var result3 = String.Equals(name, currentType, StringComparison.InvariantCulture);
    var result4 = String.Equals(name, currentType, StringComparison.Ordinal);
    var result5 = String.Equals(name, currentType, StringComparison.CurrentCultureIgnoreCase);
}
现在,在调试我的
foreach
时,我最终达到了这样一个点:name和
currentType
都等于同一个字符串-“AutoIncrementTag”。在同一点上,它们的长度(a和b)相等-16个字符

这是调试输出的外观:

//name -        "AutoIncrementТаg"
//currentType - "AutoIncrementTag"

//a - 16
//b - 16

// result - false
// result1 - false
// result2 - false
// result3 - false
// result4 - false
// result5 - false
下面的所有比较结果都返回false

我甚至尝试用“name”和currenType创建一个新字符串。什么也没有


我真的被困在这里了。两个相同的字符串(相同的长度,因此没有隐藏字符)如何在任何类型的比较中返回false。

对于这两个字符串,还可以比较字节数组

string string1 = "AutoIncrementТаg";
string charArray = string.Join( ",", string1.ToCharArray().Select(s => (int)s));
对于“AutoIncrementTag”,您应该获得:

65,117,116,111,73,110,99,114,101,109,101,110,116,1058,1072,103

对于这两个字符串,还要比较字节数组

string string1 = "AutoIncrementТаg";
string charArray = string.Join( ",", string1.ToCharArray().Select(s => (int)s));
对于“AutoIncrementTag”,您应该获得:

65,117,116,111,73,110,99,114,101,109,101,110,116,1058,1072,103

倒数第二个和倒数第三个字符不一样

最后一个字符中的一个是,另一个是。它们看起来一样,但实际上并不相同

要查看它,请运行以下程序:

using System;

namespace ConsoleApplication4
{
    class Program
    {
        static string GetEscapeSequence(char c)
        {
            return "\\u" + ((int)c).ToString("X4");
        }

        static void Main(string[] args)
        {
            var name = "AutoIncrementТаg";
            var currentType = "AutoIncrementTag";

            foreach (var character in name)
            {
                Console.WriteLine(GetEscapeSequence(character));
            }

            Console.WriteLine("second string");
            foreach (var character in currentType)
            {
                Console.WriteLine(GetEscapeSequence(character));
            }

            Console.ReadLine();
        }
    }
}

倒数第二个和倒数第三个字符不一样

最后一个字符中的一个是,另一个是。它们看起来一样,但实际上并不相同

要查看它,请运行以下程序:

using System;

namespace ConsoleApplication4
{
    class Program
    {
        static string GetEscapeSequence(char c)
        {
            return "\\u" + ((int)c).ToString("X4");
        }

        static void Main(string[] args)
        {
            var name = "AutoIncrementТаg";
            var currentType = "AutoIncrementTag";

            foreach (var character in name)
            {
                Console.WriteLine(GetEscapeSequence(character));
            }

            Console.WriteLine("second string");
            foreach (var character in currentType)
            {
                Console.WriteLine(GetEscapeSequence(character));
            }

            Console.ReadLine();
        }
    }
}

如果
String.Equals
返回false,则字符串不相同。调试时结果的价值是什么?能否提供一个可验证的示例?仅凭平面代码,您的字符串似乎不相等。只是编辑了我的帖子以显示困扰我的调试输出。我希望这能说明我的问题。(这些值都是从“调试”窗口复制/粘贴的)是否确实是精确的字符串?其中一个字符串中没有制表符/换行符/空字符?如果
String.Equals
返回false,则字符串不相同。调试时结果的价值是什么?能否提供一个可验证的示例?仅凭平面代码,您的字符串似乎不相等。只是编辑了我的帖子以显示困扰我的调试输出。我希望这能说明我的问题。(这些值都是从“调试”窗口复制/粘贴的)是否确实是精确的字符串?其中一个字符串中没有制表符/换行符/空字符?谢谢您的回答。帮了我很多忙。最后我把我的类名改成了我原来的类名,现在它可以正常工作了。这些问题真让人头疼!谢谢你的回答。帮了我很多忙。最后我把我的类名改成了我原来的类名,现在它可以正常工作了。这些问题真让人头疼!事实上,我一定是剪断并粘贴了那根坏绳子。两个高的数字(1058和1072)一定是坏字符。实际上,我必须剪切并粘贴坏字符串。两个高位数字(1058和1072)必须是坏字符。