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

 .NET Discussion :

Méthode d'extension ToUpper à IEnumerable [C#]


Sujet :

.NET

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 Méthode d'extension ToUpper à IEnumerable
    Bonjour,

    Avec le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static IEnumerable<String> ToUpper(this IEnumerable<String> strings)
            {
                IEnumerable<String> upperList = new IEnumerable<String>(); 
     
                foreach (var item in strings)
                {
                    upperList.add(item.ToUpper());
                }
     
                return upperList; 
     
            }

    je cherche ajouter une méthode d'extension ToUpper qui appelée de la manière suivante: Lists.Select(c => c.Name).ToUpper() crée un nouvel objet item et l'ajoute à une nouvelle liste nommée upperList.

    Mon 1er problème avec mon bout de code est pour créer la liste car IEnumerable est une abstract class. Mais je vois pas comment le remplacer. Mon 2nd problème est lié au 1er car du coup, il ne connait pas la méthode add!

    Est-ce que quelqu'un peut m'aiguiller pour avancer?

    Merci d'avance!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    IEnumerable<T> n'est pas une classe abstraite, c'est une interface (mais ça ne change pas grand chose au problème). Tu ne peux pas l'instancier directement, il faut instancier une classe qui l'implémente, par exemple List<String> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            public static IEnumerable<String> ToUpper(this IEnumerable<String> strings)
            {
                List<String> upperList = new List<String>(); 
     
                foreach (var item in strings)
                {
                    upperList.Add(item.ToUpper());
                }
     
                return upperList; 
            }
    Cela dit, cette approche n'est pas idéale, car tu perds le caractère "lazy" de la séquence. Il vaudrait mieux utiliser un itérateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            public static IEnumerable<String> ToUpper(this IEnumerable<String> strings)
            {
                foreach (var item in strings)
                {
                    yield return item.ToUpper();
                }
            }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bilou_12 Voir le message
    Est-ce que quelqu'un peut m'aiguiller pour avancer?
    teste ça ! ça devrait passer
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static IEnumerable<String> ToUpper(this IEnumerable<String> strings) {
          List<String> upperList = new List<String>();
     
          foreach (var item in strings) {
            upperList.Add(item.ToUpper());
          }
     
          return upperList;
     
        }

    [EDIT] Moi pas rapide à ce que je vois. Tomlev a donné la réponse et bien expliqué en plus.

  4. #4
    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
    Super! Merci à tout le monde!!!


  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Sinon y'avait aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static IEnumerable<String> ToUpper(this IEnumerable<String> strings)
            {
                return strings.Select(s=>s.ToUpper());
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] créer sa propre méthode d'extension du type IEnumerable
    Par bilou_12 dans le forum Débuter
    Réponses: 3
    Dernier message: 10/02/2012, 16h27
  2. Réponses: 2
    Dernier message: 06/03/2009, 10h52
  3. [C#] Méthodes d'extensions
    Par despeludo dans le forum Framework .NET
    Réponses: 3
    Dernier message: 01/02/2008, 10h09
  4. Réponses: 16
    Dernier message: 07/12/2007, 13h11
  5. Réponses: 6
    Dernier message: 14/08/2007, 17h28

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