1

假设我有一个myClass类,它的属性很少,例如property1property2、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 还是自定义类型)

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

感谢您的帮助。

4

3 回答 3

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();
于 2010-03-26T09:17:12.987 回答
0

我从这里得到这个:

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]
      }
    }
  }
}
于 2010-03-26T09:17:13.553 回答
-1

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

于 2010-03-26T09:15:53.533 回答