2016-03-19 4 views
-2

Я использую следующий метод для перечисления полех моего классов: Динамически перечисления полей из списка <T>

EnumerateFields(typeof(Student)); 

void EnumerateFields(Type type) 
{ 
    PropertyInfo[] props = type.GetProperties(); 
    foreach (PropertyInfo prp in props) 
    { 

    } 
} 

Это прекрасно работает.

Теперь я хотел бы выполнить ту же задачу из списка <>. Псевдокод

EnumerateFields(List<Student>); 

void EnumerateFields(List<T>) 
{ 

} 

Есть ли способ сделать это?

+1

Что делает вы думаете, что вам нужно сделать что-нибудь большее, чем заменить «Студент» на «Список » в 'typeof'? –

+0

Вы имеете в виду свойства этого списка? Если это так, вы просто сделали опечатку. Если нет, объясните, что вы хотите. –

ответ

2

Я предполагаю, что вы хотите что-то вроде этого:

void EnumerateFields<T>(List<T> input) 
{ 
    PropertyInfo[] props = typeof(T).GetProperties(); 
    foreach (var r in input) 
    {  
     foreach (PropertyInfo prp in props) 
     { 
      Console.WriteLine(prp.Name + " = " + prp.GetValue(r)); 
     } 
    } 
} 
0

Если вы уверены, вы передаете в List<T>, вы все еще можете получить свойства T как:

private void EnumerateFields(Type type) 
{ 
    Type subType = type.GetGenericArguments()[0]; 

    PropertyInfo[] props = subType.GetProperties(); 
    foreach (PropertyInfo prp in props) 
    { 
     // your logic here 
    } 
} 
+0

Вы не итерируете элементы в списке, но вы идете по его свойствам. –