我有一个.Net对象(在C#中),它有一个名为event1,event2等属性。
我必须在每个上面做一些if-else。有没有办法我可以循环这些。如果这些是控件我可以使用控件集合,但这些是对象的属性。
任何帮助?
答案 0 :(得分:2)
手动编写它可能是最清楚的。 但是,可以使用反射。
答案 1 :(得分:2)
使用reflection是您最好的选择,但对您所需要的内容可能过度。下面的代码段取自msdn:
foreach (MemberInfo mi in t.GetMembers() )
{
// If the member is a property, display information about the
// property's accessor methods.
if (mi.MemberType==MemberTypes.Property)
{
PropertyInfo pmi = ((PropertyInfo) mi);
foreach ( MethodInfo am in pmi.GetAccessors() )
{
Display(indent+1, "Accessor method: {0}", am);
}
}
}
答案 2 :(得分:2)
假设你知道你正在处理多少属性
for(int eventIndex = 0; eventIndex < NUM_EVENTS; eventIndex++)
{
PropertyInfo eventPropertyInfo =
this.GetType().GetProperty("Event" + eventIndex);
if (eventPropertyInfo.GetValue(this, null) == yourValue)
{
//Do Something here
}
}
答案 3 :(得分:1)
你这样做的理由是什么?是加快发展吗?您可以像许多人已经建议的那样使用反射,但现在直接引用属性而不是在运行时考虑性能损失会更有效。
答案 4 :(得分:0)
是的,您可以使用Reflection获取PropertyInfo对象,查询名称并获取所需的数据。
答案 5 :(得分:0)
反射很容易解决,但根据您的应用程序使用情况,它可能会很慢。
如果反射很慢,您可以通过Emiting代码加快速度。这不是最简单的事情,但最终结果与手动编写每一行的结果相同。它也很难维护这样的代码。