关于c#:使用List.Contains方法查找字符串返回false但手动比较返回true

Using List.Contains method to find a string returns false but manual comparison return true

我有一个细绳列表,我正在尝试确定其中一根是否与针串匹配。该字符串列表包含第一个索引处的指针,我的代码具有以下行为:

1
2
listOfStrings.Contains(needle); // return false
listOfStrings[0] == needle; // return true

为什么contains方法的行为与默认比较be a havior不同,我应该修改什么以使它具有相同的havior?

为了更深入地了解我所面临的问题,我正在处理来自WinForm文本框的字符串。它们表示输入路径和目标文件夹。

1
2
3
4
5
6
7
8
9
10
11
12
        if (!destinationPath.EndsWith("\"))
        {
            destinationPath +="
\";
        }
        List<string> inputDirectories = new List<string>(inputPaths.Length);
        foreach (string path in inputPaths)
        {
            inputDirectories.Add(Path.GetDirectoryName(path).ToLower());
        }

        bool comparison1 = inputDirectories[0] == Path.GetDirectoryName(destinationPath.ToLower()); // return true
        bool comparison2 = inputDirectories.Contains(Path.GetDirectoryName(destinationPath.ToLower())); // return false


你还没有说你的列表是什么类型,但是如果它是一个ArrayListList,比较将给出与List不同的结果,因为Compare方法将比较对象而不是字符串。

要理解这一点,请尝试运行以下代码:

1
2
3
4
5
6
7
string s1 ="A";
string s2 ="AB";

s1 +="B";

Console.WriteLine(s1 == s2);  // True
Console.WriteLine((object)s1 == (object)s2); // False

与字符串相比,s1s2是相等的,但它们是不同的对象。

如果您已经在使用List,并且正在查找不区分大小写的contains,请尝试此问题的公认答案中的技术。