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 :

retourner un IEnumerable


Sujet :

C#

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut retourner un IEnumerable
    hello,

    j aimerais retourner un IEnumerable vide sans créer de collection vide. Comment faire ?

    Le but est que depuis el coté appelant, je puisse utiliser un foreach sans test prealable.

    Ce que je fais actuellement (désolé pour l'exemple bidon):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public IEnumerable<CMaClasse> GetFather()
    {
        HashSet<CMaClasse> ResultCollection = new HashSet<CMaClasse>();
     
        if (j ai un géniteur connu)
        {
            ResultCollection.Add(GetPAPA);        
        }
        else if ( j ai plein de geniteurs differents (suis hybrid))
        {
           ResultCollection.UnionWith(GetMIXEDPAPA);   
        }
        return ResultCollection;
    }
    Cependant dans certain cas, il n'y a pas de papa du tout. Et comme vous le voyer je fais une instanciation evitable.

    Alors soi on me dis que le temps et la memoire relative a cette operation est insignifiante, soit vous avez une bonne idée ?
    Pour les details, cherche tout seul !

  2. #2
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Le mot clé yield répond pile poil à ton besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public IEnumerable<CMaClasse> GetFather()
    {
        if (j ai un géniteur connu)
        {
            yield return GetPAPA;
        }
        else if ( j ai plein de geniteurs differents (suis hybrid))
        {
           foreach ( CMaClasse m in GetMIXEDPAPA) // avec Getmixedpapa qui utilise aussi des yield
             yield return m;
        }
    }
    Mais quand on fait "foreach(Machin m in listeMachin)", il ne faut pas que listeMachin soit null. Sinon, ça pète
    ಠ_ಠ

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Points : 661
    Points
    661
    Par défaut
    ok, mais si j ai un truc comme ca, je peux quand meme le faire avec un yield return ?

    Suis pas obligé de déclarer une variable pour réaliser l'UnionWith() ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public IEnumerable<CMaClasse> GetConnectedSeg()
    {
        HashSet<CMaClasse> ResultCollection = new HashSet<CSegment>();
        if (this.OwnConnectedSeg())
        {
            ResultCollection.UnionWith(this.GetA);
            ResultCollection.UnionWith(this.GetB);                
        }          
        return ResultCollection;
    }
    Pour les details, cherche tout seul !

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Bah ça dépend, est-ce que dans ton parcours il y a deux fois les mêmes éléments ou pas. Si tu veux profiter de la carctéristique principale du HashSet, à savoir qu'aucun élément n'est en double, tu es bien obligé de passer par un HashSet. Si tu t'en fous, ou si tu sais que les collections que tu parcours n'ont pas d'élément en double, yield devrait faire l'affaire.

    Mais c'est qu'une question de notation, hein. Le résultat est le même
    ಠ_ಠ

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

Discussions similaires

  1. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  2. sum(XPATH) retourne NaN
    Par TOM-Z dans le forum XMLRAD
    Réponses: 4
    Dernier message: 19/03/2003, 13h48
  3. Réponses: 2
    Dernier message: 06/03/2003, 16h37
  4. Retourner un talbeau
    Par taupin dans le forum C
    Réponses: 7
    Dernier message: 19/01/2003, 04h22
  5. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16

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