2009-04-15 8 views
1

Ich habe ein .Net-Objekt (in C#), die Eigenschaften namens event1, event2 usw. hat.Zugriff auf ähnliche benannte Eigenschaften in einer Schleife

Ich muss etwas If-sonst auf jedem von diesen tun. gibt es so wie ich über diese schleifen kann. Wenn dies Steuerelemente wären, hätte ich die Steuerelementsammlung verwenden können, aber das sind Eigenschaften eines Objekts.

Irgendwelche Hilfe?

Antwort

2

Angenommen, Sie wissen, wie viele Eigenschaften, die Sie mit

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

     if (eventPropertyInfo.GetValue(this, null) == yourValue) 
     { 
      //Do Something here 
     } 
    } 
2

Es ist wahrscheinlich am klarsten, es nur manuell zu schreiben. Es ist jedoch möglich, eine Reflexion zu verwenden.

0

Ja, Sie können Reflection verwenden, um die PropertyInfo-Objekte abzurufen, die Namen abzufragen und die benötigten Daten abzurufen.

2

Verwenden Sie reflection ist Ihre beste Wette, aber es könnte für Ihre Bedürfnisse Overkill sein. Das Snippet unten aus Msdn genommen wird:

  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); 
        } 
       } 
      } 
1

Was ist Ihre Argumentation so zu tun? Soll es die Entwicklung beschleunigen? Sie können Reflektionen verwenden, wie viele bereits vorgeschlagen haben, aber es wäre viel effizienter, die Eigenschaften jetzt direkt zu referenzieren, anstatt die Laufzeit zur Laufzeit zu verringern.

0

Reflektion ist eine einfache Lösung, kann aber je nach Anwendungsnutzung langsam sein.

Wenn die Reflexion langsam ist, können Sie sie beschleunigen, indem Sie den Code Emiting. Nicht die einfachste Sache zu tun, aber das Endergebnis ist das gleiche wie wenn Sie jede Zeile manuell geschrieben haben. Es ist auch schwierig, solchen Code zu pflegen.

Verwandte Themen