如何比较两个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;
    }
有谁能帮我吗?

如何比较两个List内容数据并返回不匹配值

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>();