如何比较两个List内容数据并返回不匹配值
本文关键字:数据 返回 不匹配 两个 何比较 比较 List | 更新日期: 2023-09-27 18:10:04
我有两个List。其中内容简单的字符串值。为例:
IList1内容:
- 复仇者
- 禁闭岛 《盗梦空间》《黑暗骑士崛起》
用于内容:
- 复仇者
- 禁闭岛 《盗梦空间》《黑暗骑士崛起》
- 公园及康乐设施 丑闻
我想比较两个列表,它将返回不匹配的值。与本例一样,它将返回"Parks and Recreation"answers"Scandal",因为它们与列表1的值不匹配。
我试过了。但它会抛出异常"对象引用未设置为对象的实例"。static void Main(string[] args)
{
List<string> list1 = new List<string>();
list1.Add("The Avengers");
list1.Add("Shutter Island");
list1.Add("Inception");
list1.Add("The Dark Knight Rises");
List<string> list2 = new List<string>();
list2.Add("The Avengers");
list2.Add("Shutter Island");
list2.Add("Inception");
list2.Add("The Dark Knight Rises");
list2.Add("Parks and Recreation");
list2.Add("Scandal");
try
{
List<string> difference = Comparator(list1, list2);
foreach (var value in difference)
{
Console.WriteLine(value);
}
}
catch (System.NullReferenceException e)
{
Console.WriteLine(e.Message);
}
Console.ReadLine();
}
public static List<string> Comparator(List<string> list1, List<string> list2)
{
IEnumerable<string> differenceQuery = list1.Except(list2);
List<string> differ = null;
foreach (string s in differenceQuery)
differ.Add(s);
return differ;
}
有谁能帮我吗?
Except
方法完全符合您的描述,因此只需调用ToList
以获得List<T>
中的结果:
return list2.Except(list1).ToList();
你的代码抛出NullReffereceException
,因为differ
变量没有初始化:
List<string> differ = null;
改为:
List<string> differ = new List<string>();
然而,我建议使用ToList()
。您的Comparator
方法将不需要:
List<string> difference = list2.Except(list1).ToList()
foreach (var value in difference)
{
Console.WriteLine(value);
}
更新 -整个代码,正常工作
static void Main(string[] args)
{
List<string> list1 = new List<string>();
list1.Add("The Avengers");
list1.Add("Shutter Island");
list1.Add("Inception");
list1.Add("The Dark Knight Rises");
List<string> list2 = new List<string>();
list2.Add("The Avengers");
list2.Add("Shutter Island");
list2.Add("Inception");
list2.Add("The Dark Knight Rises");
list2.Add("Parks and Recreation");
list2.Add("Scandal");
List<string> difference = list2.Except(list1).ToList();
foreach (var value in difference)
{
Console.WriteLine(value);
}
Console.ReadLine();
}
结果Parks and Recreation
Scandal
问题出在这一行:
List<string> differ = null;
之后,您尝试向列表添加一些东西,但列表是null
。这是你的例外。
你可以这样修改:
List<string> differ = new List<string>();
但更简单的是替换这一行:
List<string> difference = Comparator(list1, list2);
由:List<string> difference = list1.Except(list2).ToList();
使用Except
var difference = list1.Except(list2).ToList();
问题就在这里。
List<string> differ = null;
必须是
List<string> differ = new List<string>();