的交叉比較,如果我有:如何做一個自定義的每個項目中的兩個集合
IEnumerable<CrewBase> crewBasesLeft;
IEnumerable<CrewBase> crewBasesRight;
做:
IEnumerable<CrewBase> intersect = crewBasesLeft
.Intersect(crewBasesRight,CrewBaseComparer.OnId());
如何獲得:
CrewBase left;
CrewBase right;
來自:
intersect
所以我可以遍歷所有的CrewBases在相交併撥打電話:
Action(left,right);
我只想做這個CrewBases,根據我的CrewBaseComparer.OnId實現在這兩個列表相等:
IEqualityComparer<CrewBase>
這是我目前實施:
IEnumerable<ObjectDifference> GetCrewBaseDifferences2(TrafficPlan left, TrafficPlan right)
{
var result = new List<ObjectDifference>();
IEnumerable<CrewBase> intersect = left.CrewBases.Intersect(right.CrewBases,CrewBaseComparer.OnId());
foreach(CrewBase crewBase in intersect)
{
CrewBase other = crewBase;
ObjectDifference diff = crewBase.GetDifference(right.CrewBases.First(x => x.Equals(other, CrewBaseComparer.OnId())));
if(diff.HasDifferences)
{
result.Add(diff);
}
}
return result;
}
可能有助於澄清CrewBaseComparer.OnID()正在引用...假定您正在使用.NET 4。0泛型IEnumerable,其中Intersect I的所有調用表單都可以在MSDN文檔中看到,需要將Intersect的第二個參數作爲對IEqualityComparer的引用? – BillW 2009-11-04 01:57:24
CrewBaseBaseComparer.OnID()是僅在CrewBase.ID上進行比較的IEqualityComparer。 這是爲了讓CrewBase.Equal()中所有具有相同ID但不是nesesary的CrewBase對象相等。 –
2009-11-04 08:10:00