Nom composant - Lambda

golden19 Messages postés 7 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 9 décembre 2011 - 9 déc. 2011 à 19:17
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 - 10 déc. 2011 à 16:18
Bonjour,

Je souhaite obtenir le nom en chaine string d'un attribut ou d'une propriété.

J'ai trouvé ce code et il fonctionne.

Check(Function() <>)

Private Shared Sub Check(Of T)(expr As Expression(Of Func(Of T)))
Dim body = DirectCast(expr.Body, MemberExpression)
MsgBox("Name is: " & body.Member.Name)
End Sub

Le seul hic, je voudrais mettre ce code dans une sous-fonction et passer mon attribut ou ma propriété en référence. Quand j'essais, j'obtiens un erreur à cause du ByRef. Quelqu'un aurais une alternative à me proposer?

Merci d'avance !

3 réponses

NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
9 déc. 2011 à 19:26
Bonjour,

Peux-tu fournir un exemple plus parlant stp ?
Sinon, as-tu regardé du coté de Reflection ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
golden19 Messages postés 7 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 9 décembre 2011
9 déc. 2011 à 19:35
Par réflexion, je peux obtenir la liste complète des propriétés de ma classe en format string. Mais dans mon cas, je veux seulement le nom de celle modifié.

Voici du code plus parlant,

Merci,


Public Class Class1

Private atoto As String
Private atoto2 As String

Public Property toto As String
Get
Return atoto
End Get
Set(value As String)
SetValeur(atoto, value)
End Set
End Property

Public Property toto2 As String
Get
Return atoto2
End Get
Set(value As String)
SetValeur(atoto2, value)
End Set
End Property


Public Sub SetValeur(ByRef propriete As String, ByVal val As String)

Dim expr As Expression(Of Func(Of String)) = CType(Function() propriete, Expression(Of Func(Of String)))
Dim body = DirectCast(expr.Body, MemberExpression)
MsgBox("Name is: " & body.Member.Name)

'Reste du code ici...

End Sub

End Class
0
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
10 déc. 2011 à 16:18
Bonjour,

C'est bien ce que je pensais.
Ça fonctionne avec une variable, mais avec une propriété, je crois que seul Reflection pourra t'aider.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0