2009-04-15 2 views
1

У меня есть объект .Net (в C#), который имеет свойства с именем event1, event2 и т. Д.Доступ к аналогичным именованным свойствам в цикле

Я должен сделать что-то по-другому на каждом из них. есть ли способ, которым я могу зацикливаться на них. Если бы это были элементы управления, я мог бы использовать коллекцию управления, но это свойства объекта.

Любая помощь?

ответ

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 
     } 
    } 
2

Возможно, это ясно, просто написать его вручную. Тем не менее, это можно сделать с помощью отражения.

0

Да, вы можете использовать Reflection для получения объектов PropertyInfo, опросить имена и получить нужные данные.

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

Что ваши рассуждения для этого? Это ускорить разработку? Вы можете использовать отражение, как многие из них уже предложили, но было бы гораздо эффективнее просто ссылаться на свойства прямо сейчас, а не на снижение производительности во время выполнения.

0

Отражение - это простое решение, но оно может быть медленным в зависимости от использования вашего приложения.

Если отражение медленное, вы можете ускорить его на Emiting. Не облегчение, но конечный результат такой же, как если бы вы написали каждую строку вручную. Его также трудно поддерживать такой код.

Смежные вопросы