Как получить тип объекта в коллекции объектов во время выполнения?

#c#-3.0

#c #-3.0

Вопрос:

В моем коде я получаю тип объекта (Party object) в цикле for и получаю информацию о свойстве конкретного свойства «firstname». Все объекты в коллекции Parties[] возвращают один и тот же тип, поэтому я хотел бы получить тип вне цикла do while только один раз и все равно должен иметь возможность получить свойство «firstname» от правильного объекта party. Возможно ли это сделать таким образом? Спасибо за любую помощь.

 public List<Party> Parties { get; set; }

PropertyInfo info = null;

i = 1
do
{

    foreach (Field field in TotalFields)
    {

        info = Parties[i - 1].GetType().GetProperty("firstname");

        //some other code here

    }
i  ;
} while (i <= Parties.Count);
  

Ответ №1:

Когда вы получаете значение для свойства через PropertyInfo объект, вам нужно передать экземпляр объекта, из которого можно извлечь значение. Это означает, что вы можете повторно использовать один и тот же PropertyInfo экземпляр для нескольких объектов, учитывая, что они того же типа, для которого PropertyInfo был создан:

 // Note how we get the PropertyInfo from the Type itself, not an object 
// instance of that type.
PropertyInfo propInfo = typeof(YourType).GetProperty("SomeProperty");

foreach (YourType item in SomeList)
{
    // this assumes that YourType.SomeProperty is a string, just as an example
    string value = (string)propInfo.GetValue(item, null);
    // do something sensible with value
}
  

Ваш вопрос помечен как C # 3, но для полноты картины стоит упомянуть, что в C # 4 это можно несколько упростить, используя dynamic :

 foreach (dynamic item in SomeList)
{
    string value = item.SomeProperty;
    // do something sensible with value
}
  

Комментарии:

1. Большое вам спасибо. Думаю, теперь я лучше понимаю.