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 ) };
应用差异后我需要得到像
这样的结果第一个对象第一个属性更改为200
第二个对象第二个属性更改为600
第二个对象第三个pr0perty更改为700
我想将上述结果列入清单 我不知道用于解决这个问题的数据结构和方法(如linq)
答案 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。