Comment parcourir chacune des propriétés de mon objet personnalisé? Ce n'est pas un objet de collection, mais existe-t-il quelque chose comme ça pour les objets non-collection?
For Each entry as String in myObject
' Do stuff here...
Next
Il y a des propriétés de chaîne, d'entier et de booléen dans mon objet.
En utilisant la réflexion, vous pouvez le faire. En C # ça ressemble à ça;
PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();
Ajout d'une traduction VB.Net:
Dim info() As PropertyInfo = myobject.GetType().GetProperties()
Vous pouvez utiliser System.Reflection espace de noms pour rechercher des informations sur le type d'objet.
For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
If p.CanRead Then
Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing))
End If
Next
Veuillez noter qu'il n'est pas suggéré d'utiliser cette approche à la place des collections dans votre code. La réflexion est une activité exigeante en performances et doit être utilisée à bon escient.
System.Reflection est "lourd", j'implémente toujours une méthode plus légère d'abord.
// C #
if (item is IEnumerable) {
foreach (object o in item as IEnumerable) {
//do function
}
} else {
foreach (System.Reflection.PropertyInfo p in obj.GetType().GetProperties()) {
if (p.CanRead) {
Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, null)); //possible function
}
}
}
"VB.Net
If TypeOf item Is IEnumerable Then
For Each o As Object In TryCast(item, IEnumerable)
'Do Function
Next
Else
For Each p As System.Reflection.PropertyInfo In obj.GetType().GetProperties()
If p.CanRead Then
Console.WriteLine("{0}: {1}", p.Name, p.GetValue(obj, Nothing)) 'possible function
End If
Next
End If
Vous pouvez utiliser la réflexion ... Avec la réflexion, vous pouvez examiner chaque membre d'une classe (un type), les propriétés, les méthodes, les constructeurs, les champs, etc.
using System.Reflection;
Type type = job.GetType();
foreach ( MemberInfo memInfo in type.GetMembers() )
if (memInfo is PropertyInfo)
{
// Do Something
}