Icomparer générique et réflexion

Description

Cette source pourrais très bien être implémenter un Winform.
Petit exemple illustrant la comparaison de n'importe quel objet par rapport à un nom d'une de ses méthodes/propriété/retour de méthode.
La classe IComparer est utilisée, ainsi on peut l'utiliser pour tout objet qui utilise la méthode Sort(IComparer), les liste par exemple.
L'implémentation est assez simple c'est se qui fait la force de ce comparateur.

Source / Exemple :


//On cree notre petite liste
 ListeEntreprise = new List<FirmUser>();
 ListeEntreprise.Add(new FirmUser("Bouygues Télécom"));
 ListeEntreprise.Add(new FirmUser("France Télécom"));
 ListeEntreprise.Add(new FirmUser("SFR"));
 ListeClient = new List<ClientUser>();
 ListeClient.Add(new ClientUser("Martin", "Jean", 20, "20 rue du louvre",ListeEntreprise[1]));
 ListeClient.Add(new ClientUser("Zert", "Romain", 25, "20 allé du louvre",ListeEntreprise[2]));
 ListeClient.Add(new ClientUser("Armand", "Bob", 50, "Place du louvre",ListeEntreprise[0]));
 ListeClient.Add(new ClientUser("Martin", "Julie", 18, "258 rue du louvre",ListeEntreprise[1]));
 ListeClient.Add(new ClientUser("Hounou", "koffi", 34, "20 rue du louvre",ListeEntreprise[0]));
 
//On cree le filtre 
private List<ObjectComparerFilter> _Filter;
public List<ObjectComparerFilter> Filter
{
	get
	{
		if (_Filter == null)
		{
			_Filter = new List<ObjectComparerFilter>();
			if (string.IsNullOrEmpty(HiddenFilter.Value))
			{
				HiddenFilter.Value = "nom,0;prenom,0;age,0;adresse,0;entreprise,0";
			}
			string[] filterTmp = HiddenFilter.Value.Split(';');
			foreach (string str in filterTmp)
			{
				string[] strTmp = str.Split(',');
				_Filter.Add(new ObjectComparerFilter(strTmp[0], ((ObjectComparerFilter.Order)(int.Parse(strTmp[1])))));
			}
		}
		return _Filter;
	}
	set
	{
		_Filter = value;
		HiddenFilter.Value = "";
		for (int i = 0; i < value.Count; i++)
		{
			HiddenFilter.Value += value[i].nom + "," + ((int)value[i].order).ToString();
			if (i < value.Count - 1)
			{
				HiddenFilter.Value += ";";
			}
		}
	}
}

//Et on trie
//le filtre par défaut: "nom,0;prenom,0;age,0;adresse,0;entreprise,0";
//nom== nom de la proriété, 0 = pas de trie (-1 et 1 sinon)
ObjectComparer<ClientUser> _ObjectComparer = new ObjectComparer<ClientUser>(Filter);
ListeClient.Sort(_ObjectComparer);

Conclusion :


Le reste dans le zip :)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.