Si j'ai:Comment faire une coutume de comparer pour chaque élément dans une Intersection de deux collections
IEnumerable<CrewBase> crewBasesLeft;
IEnumerable<CrewBase> crewBasesRight;
et à faire:
IEnumerable<CrewBase> intersect = crewBasesLeft
.Intersect(crewBasesRight,CrewBaseComparer.OnId());
Comment puis-je obtenir:
CrewBase left;
CrewBase right;
du:
intersect
donc je ne peux boucler sur tous les CrewBases dans l'Intersect et faire un appel:
Action(left,right);
Je veux seulement faire sur CrewBases qui sont égaux dans les deux liste selon mon CrewBaseComparer.OnId qui implémente:
IEqualityComparer<CrewBase>
Voici mon implémentation actuelle:
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;
}
pourrait être utile de clarifier CrewBaseComparer.OnID() fait référence ... en supposant que vous utilisez .NET 4.0 générique IEnumerable, dans lequel tout le formulaire d'appel pour Intersect je peux voir dans les documents MSDN nécessite le deuxième argument à Intersect pour être une référence à un IEqualityComparer? – BillW
Le CrewBaseBaseComparer.OnID() est IEqualityComparer qui ne compare que sur CrewBase.ID. Ceci permet d'obtenir que tous les objets CrewBase ayant le même ID mais pas le nesesary soient égaux sur CrewBase.Equal(). –