Отражение свойств типа универсального списка

#c# #.net #generics #reflection

#c# #.net #универсальные #отражение

Вопрос:

у меня есть класс, подобный приведенному ниже

 public class Foo<T>
{
  public List<T> Items{ get; set; }
}
  

и

у меня есть экземпляр, указанный выше класса,

 Foo<Bar> bars = GetBars();
  

как я могу получить свойства панели, используя отражение?

я пытаюсь это

 PropertyInfo[] properties = bars.Items.First().GetType().GetProperties();
  

но я думаю, что это не очень хороший способ, есть ли какой-нибудь лучший способ сделать это?

Ответ №1:

var Properties = bars.GetType().GetGenericArguments()[0].GetProperties();

Предполагая, что вы не знаете, какой тип будет содержать список.

Если это всегда будет Bar , то используйте typeof(Bar).GetProperties();

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

1. да, я не знаю, тип должен быть всем, я попробовал ваш код и сработал, спасибо.

Ответ №2:

попробуйте:

 var properties = typeof(Bar).GetProperties();
  

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

1. разве для этого не нужно заранее знать, что тип является Bar ?

2. Это так, но вопрос был неясен относительно того, будет ли тип известен или нет, когда свойства будут получены.

3. откуда я могу знать?, это универсальный. но для этого универсального типа существует базовый тип.