IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Ecriture de méthode d'extension


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 233
    Par défaut Ecriture de méthode d'extension
    Bonjour,

    Avec le bout de code suivant, j'ai cherché à écrire une fonction d'extension au type IEnumerable FirstOrNew qui renvoie le 1er objet de la liste ou un objet crée si la liste est vide.

    Ensuite, je cherche à reécrire FirstOrNewSup avec une caractéristique supplémentaire. Par exemple, si mes T sont des comptes avec une propriété balance, je cherche à ce que FirstOrNewSup me renvoie le 1er compte avec plus de 100€ en balance!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static T FirstOrNew<T> (this IEnumerable<T> list)
            //on suppose quele type qu'on manipule possède un constructeur par défaut
            where T:new ()
            {
                if (list == null)
                {
                    return new T();
                }
                else
                {
                    return list.First();
                }
            }
     
            public static T FirstOrNewSup<T>(this IEnumerable<T> list, Func<T, bool> selector)
            {
                return list.Where(selector).FirstOrNew(); 
            }
    Mais j'ai une erreur de compilation car le FirstOrNew(); de la fonction d'extension FirstOrNewSup<T> est inconnue?!

    Quelqu'un a une idée?

    Merci d'avance!

  2. #2
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Salut.

    Déjà, les méthodes d'extension doivent se trouver dans des classes statiques (je te laisse vérifier). Ensuite, deux possibilités :
    • tes deux méthodes se trouvent dans la même classe statique : alors rien à faire ça doit fonctionner ;
    • tes deux méthodes ne se trouvent pas dans la même classe statique : tu dois ajouter manuellement le using correspondant à la classe où se trouve FirstOrNew pour que cela soit OK.

    Bonne continuation .

  3. #3
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonjour,

    Il te faudra aussi rajouter une contrainte where T: new() à FirstOrNewSup vu qu'elle dépend de FirstOrNew qui la nécessite

    Cordialement !

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Comme dit par Shensucht, si tu rajoutes la contrainte new, c'est bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public static T FirstOrNewSup<T>(this IEnumerable<T> list, Func<T, bool> selector) where T:new()
            {
                return list.Where(selector).FirstOrNew(); 
            }

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/08/2009, 14h15
  2. Réponses: 2
    Dernier message: 06/03/2009, 09h52
  3. [C#] Méthodes d'extensions
    Par despeludo dans le forum Framework .NET
    Réponses: 3
    Dernier message: 01/02/2008, 09h09
  4. Réponses: 16
    Dernier message: 07/12/2007, 12h11
  5. Réponses: 6
    Dernier message: 14/08/2007, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo