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:
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 :oops:
voici le code complet
Code:
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 |