Ответ 1
По-прежнему не на 100% уверен, что вы хотите, но этот быстрый код (непроверенный) может привести вас к правильному пути (или, по крайней мере, помочь уточнить, что вы хотите).
void ReportValue(String propName, Object propValue);
void ReadList<T>(List<T> list)
{
var props = typeof(T).GetProperties();
foreach(T item in list)
{
foreach(var prop in props)
{
ReportValue(prop.Name, prop.GetValue(item));
}
}
}
С# должен быть в состоянии решить, что "PeopleList" наследуется от "List" и обрабатывает это прекрасно, но если вам нужно иметь "PeopleList" как общий тип, тогда это должно работать:
void ReadList<T>(T list) where T : System.Collections.IList
{
foreach (Object item in list)
{
var props = item.GetType().GetProperties();
foreach (var prop in props)
{
ReportValue(prop.Name, prop.GetValue(item, null));
}
}
}
Обратите внимание, что это фактически обработает свойства в производных типах в списке.