我已經嘗試過這里的方法:
- 比較兩個 List<string> 并列印重復項
- 有什么方法可以比較 C# 中的兩個串列
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-find-the-set-difference-between-two-lists-linq。
以上都沒有解決我的問題。
我有兩個串列,List1 和 List2。List2 是一個 .txt 檔案,讀入一個字串,然后使用逗號分割成一個串列。List1 是使用“-”拆分的瀏覽器句柄的輸出。因此,例如,List1 具有專案“堆疊溢位”、“個人”、“Microsoft Edge”,而 List2 具有專案“個人”和“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");
}
這總是會拋出一個不,即使我認為 intersect 會找到任何型別的重復項并將其提供給串列。需要明確的是,我希望結果是“個人”和“Microsoft Edge”。我也試過
bool match = List1.Contains(TextDoc);
if (match)
{
Console.WriteLine("Match");
}
else
{
Console.WriteLine("no Match");
}
TextDoc 只是使用 File.ReadAllText 讀入字串的 txt 檔案。這些選項都沒有給我匹配,盡管據我所知,它們都應該給出串列的背景關系。我在這里錯過了一些非常明顯的東西嗎?
uj5u.com熱心網友回復:
即使我認為 intersect 會找到任何型別的重復項并將其添加到串列中
你的想法是正確的。
我在這里錯過了一些非常明顯的東西嗎?
您沒有得出直接而簡單的結論:您認為List1和List2之間存在一些重復字串的假設是完全不正確的。
在除錯器中仔細檢查兩個串列中的字串。不要相信您對串列中的字串的假設。當呼叫 Intersect 方法時,您已經得到了兩個串列中沒有重復項的證據。在呼叫 Intersect 方法的確切時刻,非常仔細地驗證兩個串列中的內容。
作為旁注:還請記住,有些 Unicode 控制字符是不可見的(但在除錯器中檢查字串應該會顯示這些控制字符),并且有不同的 Unicode 字符看起來相似(如果不相同)(取決于字體使用)盡管是不同的字符。而且您的字串可能具有其中一個或另一個,使它們看起來相同但實際上包含不同的字符序列,因此本質上使它們成為不相等的字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477246.html
上一篇:使用!=null、Count>0和.Any()時的C#最佳實踐
下一篇:Linqgroupby多鍵
