Comment faire une boucle à travers toutes les propriétés d'une classe?
J'ai une classe.
Public Class Foo
Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property
Private _Age As String
Public Property Age() As String
Get
Return _Age
End Get
Set(ByVal value As String)
_Age = value
End Set
End Property
Private _ContactNumber As String
Public Property ContactNumber() As String
Get
Return _ContactNumber
End Get
Set(ByVal value As String)
_ContactNumber = value
End Set
End Property
End Class
Je veux faire une boucle par les propriétés de la classe ci-dessus.
par exemple;
Public Sub DisplayAll(ByVal Someobject As Foo)
For Each _Property As something In Someobject.Properties
Console.WriteLine(_Property.Name & "=" & _Property.value)
Next
End Sub
Vous devez vous connecter pour publier un commentaire.
Utiliser La Réflexion:
Edit: Vous pouvez également spécifier un BindingFlags de la valeur à
type.GetProperties()
:Qui va limiter le retour de propriétés publiques des propriétés d'une instance (à l'exclusion des propriétés statiques, les propriétés protégées, etc).
Vous n'avez pas besoin de spécifier
BindingFlags.GetProperty
, vous l'utiliser lors de l'appel detype.InvokeMember()
pour obtenir la valeur d'une propriété.BindingFlags.Public | BindingFlags.GetProperty
ou quelque chose?Noter que si l'objet dont vous parlez a une propriété personnalisée modèle (comme les
DataRowView
etc pourDataTable
), alors vous devez utiliserTypeDescriptor
; la bonne nouvelle, c'est que cela fonctionne toujours très bien pour des classes régulières (et peut-être même beaucoup plus rapide que la réflexion):Cela fournit également un accès facile à des choses comme
TypeConverter
pour la mise en forme:VB version de C# donnée par Brannon:
À l'aide de la Liaison des drapeaux, au lieu de la ligne no.3
Réflexion est assez "lourd"
Peut-être essayer cette solution:
//C#
'VB.Net
Réflexion ralentit +/- 1000 x la vitesse d'un appel de méthode, illustrée en Les Performances des Choses de tous les jours
J'ai utilisé le bloc de code ci-dessus pour réinitialiser toutes les propriétés de chaîne dans mon web objet de contrôle utilisateur qui sont les noms qui commencent par "Doc".
Voici une autre façon de faire, à l'aide d'une LINQ lambda:
C#:
VB.NET:
C'est comment je le fais.