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 :

méthode générique : contrainte sur les paramètres


Sujet :

C#

  1. #1
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut méthode générique : contrainte sur les paramètres
    Bonjour,

    J'aimerais contraindre les paramètres d'une méthode générique à être soit de type T soit de type IEnumerable<T>. Comme il y un nombre indéterminé de paramètre, je souhaite utiliser le mot clé params.

    L'idéal serait donc d'écrire un truc du style :

    MaMethode<S>(params S) où S est soit T soit IEnumerable<T>.

    Je sent que ça n'est pas possible, mais je poste quand même au cas où...

    Si vous avez des idées...

    Merci.
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    La surcharge de méthode ne conviendrait pas ?

  3. #3
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Tu veux dire écrire autant de méthodes qu'il y a de signatures possibles ? Ca risque d'en faire un paquet...
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    J'ai lu un peu vite...

    Comme ça je ne sais pas en fait...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    as tu essayé quelquechose du genre :

    (de tête)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaMethode<S>(params S) where S : IEnumerable<T>
    MaMethode<S>(params S) where S : T

  6. #6
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Non, je voudrais pouvoir appeler ma méthode avec par exemple le premier argument de type T, le second de type IEnumerable<T>, le troisième de type T, etc...
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  7. #7
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    un truc comme ça, ça irait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void MaMethode<S>(params S[] args) where S : T, IEnumerable<T>
    {
       ...
    }
    Là ça devrait accepter les 2 types d'arguments. Par contre je suis pas sûr que ça fonctionne si tu mélanges les 2 dans le même appel... ça m'étonnerait même.
    Mais fonctionnellement, je vois pas trop de justification à ce que tu voudrais faire...

  8. #8
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Il me semble que cette contrainte demande que S hérite de T et implémente IEnumerable<T> alors que je voudrais l'un oul'autre. En plus il faudrait qu'on puisse mélanger les 2...
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  9. #9
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    d'après la doc:
    Multiple constraints can be applied to the same type parameter, and the constraints themselves can be generic types, as follows:
    class EmployeeList<T> where T : Employee, IEmployee, System.IComparable<T>, new()
    {
    // ...
    }
    mais je sais pas si ça veut dire que toutes les contraintes doivent être remplies, ou au moins une...

  10. #10
    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
    Ca veut dire toutes. Dans la mesure de mes connaissances, ce que veut maa est impossible.

    Au pire, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void f(params IEnumerable<T>[] tesEnumerables) { ... }
    public IEnumerable<T> g(T t) { yield return t; }
     
    f(g(t1), enum1, g(t2), enum2, ...));
    C'est le plus court que je puisse proposer Pas top d'un point de vue perfs, mais bon.

    Remarque, en C#3 et en utilisant les méthodes d'extension, il y a peut être moyen de faire de g un opérateur de conversion explicite, qui casterait tout T en IEnumerable<T>. Pas de visual 2008 sous la main pour tester par contre
    ಠ_ಠ

  11. #11
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Les méthodes d'extensions ne permettent pas de faire d'opérateur de conversion explicite non ?
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

Discussions similaires

  1. Modéle mixte avec contraintes sur les paramètres
    Par AstridG dans le forum SAS STAT
    Réponses: 6
    Dernier message: 18/02/2011, 10h46
  2. Contraintes sur les paramètres d'une régression
    Par geofnich dans le forum SAS STAT
    Réponses: 3
    Dernier message: 28/07/2010, 16h13
  3. lsqnonlin et contrainte sur les paramètres
    Par salseropom dans le forum MATLAB
    Réponses: 0
    Dernier message: 27/07/2009, 16h04
  4. [VB6]Question bête sur les paramètres optionels
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 20h33
  5. Réponses: 3
    Dernier message: 28/04/2005, 16h56

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