假设我有一个 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还是自定义类型)
我希望我能够清楚地表达自己。否则我可以修改文本。
感谢您的帮助。
答案 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()方法可以帮助你吗?