2008-11-24 3 views
34

Comment puis-je parcourir chacune des propriétés de mon objet personnalisé? Ce n'est pas un objet de collection, mais y a-t-il quelque chose comme ça pour les objets non collectionnés?Comment parcourir chaque propriété d'un objet vb.net personnalisé?

For Each entry as String in myObject 
    ' Do stuff here... 
Next 

Il existe des propriétés string, integer et boolean dans mon objet.

Répondre

59

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() 
+0

Où est la valeur à l'intérieur de chaque entrée? – Anders

+0

Il existe une méthode nommée propertyInfo.GetValue(). –

+0

Comment cela fonctionne-t-il dans le contexte d'une boucle "For Each"? – tmsimont

1

Vous pouvez utiliser la réflexion ... Avec réflexion, vous pouvez examiner tous les membres d'une classe (un type), proeprties, méthodes, contructeurs, champs, etc ..

using System.Reflection; 

Type type = job.GetType(); 
    foreach (MemberInfo memInfo in type.GetMembers()) 
     if (memInfo is PropertyInfo) 
     { 
      // Do Something 
     } 
41

Vous pouvez utiliser System.Reflection namespac e pour interroger 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 recommandé d'utiliser cette approche à la place des collections dans votre code. La réflexion est une chose qui demande beaucoup de performance et devrait être utilisée à bon escient.

+0

+1 m'a aidé - merci – ppumkin

+0

@MehrdadAfshari Juste ce dont j'avais besoin, merci! :) – Chiramisu

+0

J'ai eu un problème. c'est une erreur: la référence d'objet n'est pas définie sur une instance d'un objet. –

5

System.Reflection est "poids lourd", je toujours une méthode mettre en œuvre 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 
Questions connexes