Connect

Balise - Le .NET des ptits patelins

Fil des billets

jeudi 6 mars 2008

Recherche dans des listes grâce aux délégués ( C#)

Le quotidien d'un développeur consiste le plus souvent à trouver l'information dont il a besoin et de l'utiliser de façon intelligente, et j'ai remarqué une petite chose lorsque je regarde des exemples de code sur le net,c'est que pas mal de gens ne savent pas utiliser ce que j'appellerais "'une des plus grande invention du langage" : la recherche dans les collections d'élément via des délégués.

Qu'est-ce que sont les délégués ?
Un petit exemple rapide:
Une classe Personne avec des attributs Nom, Prenom.
Une liste contenant des personnes serait du genre :

List<Personne> listePersonne = new List<Personne>();
///Nouvelles personnes
Personne p1 = new Personne("Duran", "Paul");
Personne p2 = new Personne("Dupont", "Paul");
listePersonne.Add(p1);
listePersonne.Add(p2);

Pour rechercher une personne contenu dans la liste, une grande partie des personnes fait avec la méthode old-school:

Personne perso;
for (int i = 0; i < listePersonne.Count; i++)
{
    if (listePersonne[i].Nom == "Duran")
    {
        perso = listePersonne[i];
    }
}

Ce code marche, mais en C#, il existe la méthode Find :

///Recherche d'une personne
Personne perso = listePersonne.Find(delegate(Personne p) { return p.Nom == "Duran"; });
///Recherche de plusieurs personnes
List<Personne> lperso = listePersonne.FindAll(delegate(Personne p) { return p.Nom == "Paul"; });

Ça fait exactement la même chose (à part que find renvoie la première occurrence trouvée alors que le code avec le for renvoie la dernière occurrence)
De nombreuses méthodes utilisent les délégués (Find, FindAll...) C'est très utile et c'est surtout beaucoup plus propre dans le code. Je suppose que du coté des performances, c'est la même chose, un gain de rapidité grâce au Find, à confirmer toutefois.

jeudi 16 août 2007

SelectedIndexChanged qui ne marche pas sur un Dropdownlist

Dans le genre, le .net ca marche pas, c’est nul, il y a le : pourquoi ma Dropdownlist ASP (liste déroulante) ne va pas dans son événement SelectedIndexChanged lorsque je clique sur un élément de la liste?

Solution : il ne faut pas oublier d’activer l’attribut AutoPostBack du DropDowlList, après ça miracle, on va automatiquement dans l’évènement SelectedIndexChanged !

Où comment perdre 2h dans une matinée pour trouver ça...

mercredi 18 juillet 2007

.Net : Request for the permission of type

Voilà, un petit truc sur lequel j'ai galéré pendant une bonne journée sans rien trouver de très explicite, c'est grâce à ce site que j'ai reussi à me débloquer. Je poste ça, on sait jamais, ça peut aider d'autres galériens de l'ASP ^^;

Mise en place du contexte: Je développe une application WEB ASP.NET 2.0. Mon appli communique avec une base de données Access pour récupérer des données via le provider Microsoft.JET.OLEDB.4.0 et là cette erreur apparait :

"Request for the permission of type 'System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed."

Comment faire pour résoudre cette erreur?

Il faut tout simplement vérifier le niveau de sécurité dans le web.config de l'appli; en effet, le driver OleDb ne permet pas l'acces à la BD si les droits sont à bas niveau, bref si jamais la ligne ci-dessous est présente:

<trust level="Medium" originUrl="" />

Suppprimez là ou placez là en trust level full. Ca devrait supprimer l'erreur ci-dessus.
Pour plus d'info: la doc sur msdn