找到2个通用List之间的区别

时间:2014-07-04 09:18:41

标签: c# linq

Hai我的问题是我有2个通用对象列表

 List<plan> previousYear;  
 List<plan> Nextyear;  

我需要以自定义方式区分它们

例如:

public class plan{
         int budget;
         int expense;
         int savings 
}

   List<plan> previousYear = new List<plan>() { new plan ( 100, 200, 300 ), 
                            new plan( 400, 500, 600 ) };  

   List<plan> nextYear = new List<plan>() { new plan ( 200, 200, 300 ), 
                         new plan ( 400, 600, 700 ) };  

应用差异后我需要得到像

这样的结果
  1. 第一个对象第一个属性更改为200

  2. 第二个对象第二个属性更改为600

  3. 第二个对象第三个pr0perty更改为700

  4. 我想将上述结果列入清单 我不知道用于解决这个问题的数据结构和方法(如linq)

2 个答案:

答案 0 :(得分:2)

您可以使用Zip方法:

var result = previousYear.Zip(nextYear,
            (p, n) =>
                new plan(Math.Max(p.budget, n.budget), 
                    Math.Max(p.expense, n.expense),
                    Math.Max(p.savings, n.savings)))
                    .ToList();

答案 1 :(得分:1)

首先,您可以为名为-的自定义类重载Plan运算符,如下所示:

public class Plan
{
    public int Budget { get; set; }
    public int Expense{ get; set; }
    public int Savings { get; set; }

    public Plan(int budget, int expense, int savings)
    {
        Budget = budget;
        Expense = expense;
        Savings = savings;
    }

    public static Plan operator -(Plan p1, Plan p2)
    {
        return new Plan(p1.Budget - p2.Budget, 
                        p1.Expense - p2.Expense, 
                        p1.Savings - p2.Savings);
    }
}

然后你可以使用LINQ的Zip方法得到你想要的东西,如下所示:

var result = previousYear.Zip(nextYear, (p,n) => p-n);

有关Zip方法的详情,请查看here