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

时间:2017-11-30 20:48:41

标签: c# .net string string-comparison

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

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

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

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

        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

1 个答案:

答案 0 :(得分:1)

您尚未说明列表的类型,但如果是ArrayListList<object>,则比较会得出与List<string>不同的结果,因为{{1} }方法将比较对象而不是字符串。

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

Compare
当作为字符串进行比较时,

string s1 = "A"; string s2 = "AB"; s1 += "B"; Console.WriteLine(s1 == s2); // True Console.WriteLine((object)s1 == (object)s2); // False s1相等,但它们是不同的对象。

如果您已经在使用s2并且正在寻找不区分大小写的包含,请尝试使用the accepted answer to this question中的技术。