Richard77
Richard77

Reputation: 21631

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.

Upvotes: 1

Views: 388

Answers (3)

rohancragg
rohancragg

Reputation: 5136

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]
      }
    }
  }
}

Upvotes: 0

Darin Dimitrov
Darin Dimitrov

Reputation: 1038830

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();

Upvotes: 4

pierroz
pierroz

Reputation: 7870

would the Type.GetProperties() method help you?

Upvotes: -1

Related Questions