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

Développement Web avec .NET Discussion :

Passer une class comme argument de fonction


Sujet :

Développement Web avec .NET

  1. #1
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut Passer une class comme argument de fonction
    Bonjour,

    J'essaie de faire une fonction générique, mais j'ai besoin de passer en paramètre une class (pas une instance, mais la class)
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim orderByFunc As Func(Of WebForm2.Eleve, Object) = Expression.Lambda(Of Func(Of WebForm2.Eleve, Object))(memberExpr, paramExpr).Compile()

    Ici, je voudrai remplacer WebForm2.Eleve par mon paramètre.

    pour le moment, je passe le type de ma class : ByVal TypeClass As Type

    Soit que j'arrive à passer en paramètre une class et je fait un GetType pour avoir le type
    Soit à partir de mon type, j'obtiens ma class ...

    Mais, je n'arrive à faire aucun des 2

    voici le code complet
    Code vb.net : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Public Shared Function AppliqueFiltreTri(ByVal TypeClass As Type, ByVal lstOrig As IEnumerable(Of Object), ByVal MesDonnees As TableFullOption.PagerFrom.PagerTabEnCours) As IEnumerable(Of Object)
     
            Dim query As IEnumerable(Of Object) = From le As WebForm2.Eleve In lstOrig Select le
     
            For Each Sort In MesDonnees.Tri
     
                Dim sortPropertyName As String = TableFullOption.Head.lstColName(Sort.IndexColonne)
     
                If (TypeClass.GetProperties().Any(Function(prop) prop.Name = sortPropertyName AndAlso prop.CanRead)) Then
     
                    Dim pinfo As PropertyInfo = TypeClass.GetProperty(sortPropertyName)
     
                    Dim paramExpr As ParameterExpression = Expression.Parameter(TypeClass, "instance")
     
                    Dim memberExpr As Expression = Expression.Property(paramExpr, pinfo)
                    If pinfo.PropertyType.IsValueType Then
                        memberExpr = Expression.Convert(memberExpr, GetType(Object))
                    End If
     
     
     
                    Dim orderByFunc As Func(Of WebForm2.Eleve, Object) = Expression.Lambda(Of Func(Of WebForm2.Eleve, Object))(memberExpr, paramExpr).Compile()
                    Dim sortFunc As Func(Of IEnumerable(Of WebForm2.Eleve), IOrderedEnumerable(Of WebForm2.Eleve)) = Nothing
                    If (Not CBool(Sort.Sens)) Then
                        sortFunc = (Function(source) source.OrderBy(orderByFunc))
                    Else
                        sortFunc = (Function(source) source.OrderByDescending(orderByFunc))
                    End If
     
                    query = sortFunc(query).ToList()
                End If
            Next
     
            Return query.AsEnumerable
     
        End Function
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  2. #2
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    En grattant

    J'ai ajouter une class autour de ma fonction :
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Class FonctionOf(Of MaClass As Class)
            Public Shared Function AppliqueFiltreTri(ByVal lstOrig As IEnumerable(Of Object), ByVal MesDonnees As TableFullOption.PagerFrom.PagerTabEnCours) As IEnumerable(Of Object)
    ...
     End Function
        End Class
    L'appel :
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim lstRet = TableFullOption.FonctionOf(Of WebForm2.Eleve).AppliqueFiltreTri(lstOrig, MesDonnees)

    ça marche , mais j'aurai voulu utiliser plutôt
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Shared Function AppliqueFiltreTri(Of T As Class)(ByVal value As T, ByVal TypeClass As Type, ByVal lstOrig As IEnumerable(Of Object), ByVal MesDonnees As TableFullOption.PagerFrom.PagerTabEnCours) As IEnumerable(Of Object)

    Mais je n'arrive pas à faire l'appel correctement
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

  3. #3
    Membre chevronné
    Avatar de Pelote2012
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 925
    Points : 1 839
    Points
    1 839
    Billets dans le blog
    2
    Par défaut
    idiot que je suis j'avais oublier le of dans mon appel ...de fonction
    Si débugger est l'art d'enlever les bugs ... alors programmer est l'art de les créer

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

Discussions similaires

  1. Passer une REGEX en argument de fonction puis en attribut
    Par helkøwsky dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/06/2013, 22h40
  2. Réponses: 3
    Dernier message: 05/11/2009, 10h28
  3. passer une classe comme parametre d'une fonction
    Par antoine dpt dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/07/2009, 13h10
  4. Réponses: 7
    Dernier message: 03/03/2008, 11h17
  5. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 20h15

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