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

C# 访问循环中类似的命名属性,c#,.net,C#,.net,我有一个.Net对象(在C#中),它的属性名为event1、event2等等 我必须对每一个都做一些if-else。有没有办法让我把这些绕过去。如果这些是控件,我可以使用控件集合,但这些是对象的属性 有什么帮助吗?手动写出来可能是最清楚的。 然而,使用反射是可能的。手动写出可能是最清晰的。 但是,也可以使用反射。是的,您可以使用获取PropertyInfo对象,查询名称并获取所需的数据。是的,您可以使用获取PropertyInfo对象,查询名称并获取所需的数据。使用是您的最佳选择,但对于您所需的

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

我必须对每一个都做一些if-else。有没有办法让我把这些绕过去。如果这些是控件,我可以使用控件集合,但这些是对象的属性


有什么帮助吗?

手动写出来可能是最清楚的。
然而,使用反射是可能的。

手动写出可能是最清晰的。 但是,也可以使用反射。

是的,您可以使用获取PropertyInfo对象,查询名称并获取所需的数据。

是的,您可以使用获取PropertyInfo对象,查询名称并获取所需的数据。

使用是您的最佳选择,但对于您所需的内容来说,这可能有些过分。以下代码段摘自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);
                    }
                }
            }
使用是你最好的选择,但对于你所需要的东西来说,这可能是过分的。以下代码段摘自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);
                    }
                }
            }

假设你知道你要处理多少财产

    for(int eventIndex = 0; eventIndex < NUM_EVENTS; eventIndex++)
    {
        PropertyInfo eventPropertyInfo = 
            this.GetType().GetProperty("Event" + eventIndex);

        if (eventPropertyInfo.GetValue(this, null) == yourValue)
        {
             //Do Something here
        }
    }
for(int-eventIndex=0;eventIndex
假设您知道要处理多少属性

    for(int eventIndex = 0; eventIndex < NUM_EVENTS; eventIndex++)
    {
        PropertyInfo eventPropertyInfo = 
            this.GetType().GetProperty("Event" + eventIndex);

        if (eventPropertyInfo.GetValue(this, null) == yourValue)
        {
             //Do Something here
        }
    }
for(int-eventIndex=0;eventIndex
你这样做的理由是什么?是为了加快发展吗?您可以按照许多人的建议使用反射,但是现在直接引用属性而不是在运行时承担性能损失会更加有效。

您这样做的理由是什么?是为了加快发展吗?您可以按照许多人的建议使用反射,但现在直接引用属性而不是在运行时承担性能损失会更加有效。

反射是一个简单的解决方案,但它可能会很慢,具体取决于您的应用程序使用情况


如果反射很慢,您可以通过代码来加速它。这不是最容易做的事情,但最终结果与手动编写每一行一样。维护这样的代码也很困难。

反射是一个简单的解决方案,但根据应用程序的使用情况,它可能会很慢

如果反射很慢,您可以通过代码来加速它。这不是最容易做的事情,但最终结果与手动编写每一行一样。维护这样的代码也很困难