#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. откуда я могу знать?, это универсальный. но для этого универсального типа существует базовый тип.