如何在类对象中存储类的所有属性?

时间:2010-03-26 09:09:02

标签: c#-3.0 system.reflection

假设我有一个 myClass 类,它具有很少的属性,例如 property1 property2,perperty3,等。现在,我我想用每个属性填充一个数组,以便我可以通过它的索引访问每个属性。有自动方式吗?

以下是SportsStore(Pro ASPN.NET MVC / Steve Sanderson / Apress)关于如何收集“装配”中所有活动控制器的示例。

 var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
 where typeof(IController).IsAssignableFrom(t) 
 select t; 

 foreach(Type t in controllerTypes)
    //Do something

我想知道是否有类似于上面的内容我可以用来收集(仅)类的属性并将它们存储在数组中,无论每个类型的值(int,string还是自定义类型)

我希望我能够清楚地表达自己。否则我可以修改文本。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

你可以使用反射:

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

和看起来更好的LINQ版本:

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

答案 1 :(得分:0)

我是从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]
      }
    }
  }
}

答案 2 :(得分:-1)

Type.GetProperties()方法可以帮助你吗?