我已经尝试了以下方法:
- 比较两个List
并打印副本 在c#中有没有办法比较两个列表? - https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-find-the-set-difference-between-two-lists-linq。
以上都不能解决我的问题。
我有两个列表,List1和List2。List2是一个.txt文件,它被读入一个字符串,然后用逗号分割成一个列表。清单1是使用'-'分割的浏览器句柄的输出。例如,清单1有"Stack overflow"、"personal"、"Microsoft Edge",清单2有"personal"one_answers"Microsoft Edge"。所以,这两个表之间有重叠。我试过下面的方法,但没有成功。
List<string> duplicates = List2.Intersect(List1).ToList();
if (duplicates.Count > 0)
{
foreach(var dup in duplicates)
{
Console.WriteLine(dup);
}
}
else
{
Console.WriteLine("No");
}
这总是会抛出一个no,即使我认为相交会找到任何类型的重复并将其提供给列表。明确地说,我希望得到"个人"的结果。和"Microsoft edge"。我也试过
bool match = List1.Contains(TextDoc);
if (match)
{
Console.WriteLine("Match");
}
else
{
Console.WriteLine("no Match");
}
TextDoc只是使用File.ReadAllText读取成字符串的txt文档。这两个选项都不能给我一个匹配,尽管据我所知,它们都应该给出列表的上下文。我是不是错过了什么非常明显的东西?
尽管我认为intersect会找到任何类型的重复并将其提供给列表
你的想法是正确的。
我是不是错过了一些非常明显的东西?
您没有得出直接而简单的结论:您假设在List1和List2之间存在一些重复的字符串,这是完全不正确的。
仔细检查两个列表中的字符串在调试器中。不要相信你对列表中字符串的假设。您已经得到了在调用Intersect方法时两个列表中没有重复项的证据。非常仔细地验证在调用Intersect方法的确切时刻,两个列表中的内容。
作为一个边注:还要记住,有些Unicode控制字符是不可见的(但是在调试器中检查字符串应该会显示出这样的控制字符),尽管是不同的字符,但也有不同的Unicode字符看起来相似(取决于所使用的字体)。您的字符串可能会以其中一种或另一种为特征,使它们看起来相同,但实际上包含不同的字符序列,从而实质上使它们成为不相等的字符串。