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 :

Clarification déclaration 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 Clarification déclaration méthode d'extension
    Bonjour,

    En pleine révision, je m'interroge sur un corrigé.
    Il s'agit de créer des méthodes d'extension mais je suis surpris par la manière dont la méthode suivante (qui a pour but de pouvoir appliquer la méthode ForEach à une liste et de renvoyer une liste) est déclarée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static IEnumerable<T> ForEach<T>(this IEnumerable<T> list, Action<T> expr)
            {
                foreach (var item in list)
                {
                    expr(item);
                }
                return list;
            }
    Ma question est: pourquoi faut-il rajouter un <T> après public static IEnumerable<T> ForEach?

    Je vous remercie vivement de répondre à ma question car je n'ai pas trouvé de réponse précise dans google...

    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.

    Il s'agit d'une méthode d'extension générique que tu peux donc appliquer par exemple à un IEnumerable<string>, un IEnumerable<int>, etc. . C'est pour t'éviter de déclarer une méthode par type :
    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
    public static IEnumerable<string> ForEach<string>(this IEnumerable<string> list, Action<string> expr) {
        foreach (var item in list) {
            expr(item);
        }
        return list;
    }
     
    public static IEnumerable<int> ForEach<int>(this IEnumerable<int> list, Action<int> expr) {
        foreach (var item in list) {
            expr(item);
        }
        return list;
    }
     
    // Etc.
    Par contre, dans ce cas précis, je ne vois pas pourquoi renvoyer la liste (qui sera égale à celle en entrée quoi qu'il arrive ). Un void me paraîtrait plus adéquat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void ForEach<T>(this IEnumerable<T> list, Action<T> expr) {
        foreach (var item in list) {
            expr(item);
        }
    }
    Si tu veux renvoyer une liste modifiée, tu peux passer par un Func<T, T> et un coup de yield, mais bon ça reviendrait exactement au même qu'un Select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static IEnumerable<T> ForEachModif<T>(this IEnumerable<T> list, Func<T, T> expr) {
        foreach (var item in list) {
            yield return expr(item);
        }
    }
     
    // Même résultat
    IEnumerable<int> testInt = new List<int>() { 1, 2 };
    IEnumerable<int> testIntForEachModif = testInt.ForEach(i => i += 10);
    IEnumerable<int> testIntForSelect = testInt.Select(i => i += 10);

Discussions similaires

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

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