Tutorial :How can I store all the properties of a class in an array of objects?


Let's say I've a class myClass which has few properties, such as property1, property2, perperty3, etc. Now, I'd like to populate an array with each of those properties so that, I can access each of them through its index. Is there an automatic way of doing so?

Here's an example from SportsStore (Pro ASPN.NET MVC/Steve Sanderson/Apress) on how to gather all the active controllers in the the 'Assembly'.

 var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()   where typeof(IController).IsAssignableFrom(t)    select t;      foreach(Type t in controllerTypes)      //Do something  

I wonder if there is some thing like the one above I can use to collect (only) properties of a class and store them in a array, no matter each one's type value (int, string, or custom type)

I hope I was able to express myself clearly. Otherwise I can amend the text.

Thanks for helping.


would the Type.GetProperties() method help you?


You could use reflection:

var foo = new  {      Prop1 = "prop1",      Prop2 = 1,      Prop3 = DateTime.Now  };    var properties = TypeDescriptor.GetProperties(foo.GetType());  var list = new ArrayList();  foreach (PropertyDescriptor property in properties)  {      var value = property.GetValue(foo);      list.Add(value);  }  

and LINQ version which looks better to the eye:

var list = TypeDescriptor      .GetProperties(foo.GetType())      .Cast<PropertyDescriptor>()      .Select(x => x.GetValue(foo))      .ToArray();  


I got this from here:

foreach(Type t in controllerTypes)  {    foreach (MemberInfo mi in t.GetMembers() )    {      if (mi.MemberType==MemberTypes.Property)      {        // If the member is a property, display information about the property's accessor methods        foreach ( MethodInfo am in ((PropertyInfo) mi).GetAccessors() )        {          // do something with [am]        }      }    }  }  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »