在循环中访问类似的命名属性

时间:2009-04-15 03:32:25

标签: c# .net

我有一个.Net对象(在C#中),它有一个名为event1,event2等属性。

我必须在每个上面做一些if-else。有没有办法我可以循环这些。如果这些是控件我可以使用控件集合,但这些是对象的属性。

任何帮助?

6 个答案:

答案 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代码加快速度。这不是最简单的事情,但最终结果与手动编写每一行的结果相同。它也很难维护这样的代码。