Voici ce que je suis en train de faire. Je suis interrogation d'un fichier XML à l'aide de LINQ to XML, ce qui me donne un IEnumerable<T
>, où T est mon "Village" de la classe, rempli avec les résultats de cette requête. Certains résultats sont dupliqués, donc je voudrais effectuer un Distinct() sur l'objet IEnumerable, comme suit:
public IEnumerable<Village> GetAllAlliances()
{
try
{
IEnumerable<Village> alliances =
from alliance in xmlDoc.Elements("Village")
where alliance.Element("AllianceName").Value != String.Empty
orderby alliance.Element("AllianceName").Value
select new Village
{
AllianceName = alliance.Element("AllianceName").Value
};
// TODO: make it work...
return alliances.Distinct(new AllianceComparer());
}
catch (Exception ex)
{
throw new Exception("GetAllAlliances", ex);
}
}
Comme le comparateur par défaut ne serait pas travailler pour le Village d'objet, j'ai mis en place un programme personnalisé, comme on le voit ici dans le AllianceComparer classe:
public class AllianceComparer : IEqualityComparer<Village>
{
#region IEqualityComparer<Village> Members
bool IEqualityComparer<Village>.Equals(Village x, Village y)
{
// Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y))
return true;
// Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.AllianceName == y.AllianceName;
}
int IEqualityComparer<Village>.GetHashCode(Village obj)
{
return obj.GetHashCode();
}
#endregion
}
La méthode Distinct() ne fonctionne pas, j'ai exactement le même nombre de résultats avec ou sans elle. Une autre chose, et je ne sais pas si c'est possible, mais je ne peut pas en AllianceComparer.Equals() pour voir ce qui pourrait être le problème.
J'ai trouvé des exemples sur Internet, mais je n'arrive pas à faire mon travail de mise en œuvre.
Heureusement, quelqu'un ici pourrait voir ce qui pourrait être mal ici! Merci à l'avance!