我有两个List。哪个内容简单的字符串值。例如:
IList1内容:
List2内容:
我想比较两个列表,它会返回不匹配的值。就像在这种情况下一样,它将返回“Parks and Recreation”和“Scandal”,因为它们与List1的值不匹配。
我试了一下。但它抛出异常“对象引用未设置为对象的实例”。
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;
}
任何人都可以帮助我吗? 提前谢谢。
答案 0 :(得分:8)
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
答案 1 :(得分:5)
问题在于这一行:
List<string> differ = null;
之后,您尝试向列表中添加内容,但列表为null
。你有例外。
您可以按如下方式更改:
List<string> differ = new List<string>();
但更容易取代这一行:
List<string> difference = Comparator(list1, list2);
人:
List<string> difference = list1.Except(list2).ToList();
答案 2 :(得分:1)
使用Except
var difference = list1.Except(list2).ToList();
答案 3 :(得分:1)
问题就在这里。
List<string> differ = null;
需要
List<string> differ = new List<string>();