42

How can I go through each of the properties in my custom object? It is not a collection object, but is there something like this for non-collection objects?

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

There are string, integer and boolean properties in my object.

Anders
  • 12,088
  • 34
  • 98
  • 146

4 Answers4

68

By using reflection you can do that. In C# it looks like that;

PropertyInfo[] propertyInfo = myobject.GetType().GetProperties();

Added a VB.Net translation:

Dim info() As PropertyInfo = myobject.GetType().GetProperties()
Joel Coehoorn
  • 399,467
  • 113
  • 570
  • 794
Ali Ersöz
  • 15,860
  • 11
  • 50
  • 64
45

You can use System.Reflection namespace to query information about the object type.

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

Please note that it is not suggested to use this approach instead of collections in your code. Reflection is a performance intensive thing and should be used wisely.

Mehrdad Afshari
  • 414,610
  • 91
  • 852
  • 789
7

System.Reflection is "heavy-weight", i always implement a lighter method first..

//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
NicoJuicy
  • 3,435
  • 4
  • 40
  • 66
1

You can use reflection... With Reflection you can examine every member of a class (a Type), proeprties, methods, contructors, fields, etc..

using System.Reflection;

Type type = job.GetType();
    foreach ( MemberInfo memInfo in type.GetMembers() )
       if (memInfo is PropertyInfo)
       {
            // Do Something
       }
Charles Bretana
  • 143,358
  • 22
  • 150
  • 216