У нас есть DAL, который мы используем с NHibernate.Search
, поэтому классы, которые необходимо индексировать, украшены атрибутом Indexed(Index:="ClassName")
, и каждое свойство, которое необходимо индексировать, имеет атрибут Field(Index:=Index.Tokenized, Store:=Store.No)
. Когда требуется индексировать специальные объекты, есть атрибут IndexedEmbedded()
Как получить общий тип, используемый в общем IEnumerable в .net?
Для автоматической документирования нашей иерархии индексирования я построил простой синтаксический анализатор, который проходит через узел DAL, выбирает любой класс, помеченный как индексируемый и получает свойства, которые являются либо индексируемыми, либо тип которых доступен для развертки. Когда тип свойства объявляется доступным для детализации, я нажимаю этот тип в очередь и обрабатываю его.
Проблема в том, что среди классов, которые вы можете развернуть, некоторые из них содержатся в общих коллекциях IEnumerable. Я хотел бы получить тип, используемый для коллекции (обычно ISet), чтобы разобрать его.
Итак, каков способ получить внутренний тип коллекции?
Private m_TheMysteriousList As ISet(Of ThisClass)
<IndexedEmbedded()> _
Public Overridable Property GetToIt() As ISet(Of ThisClass)
Get
Return m_TheMysteriousList
End Get
Set(ByVal value As ISet(Of ThisClass))
m_TheMysteriousList = value
End Set
End Property
Как я добраться до ThisClass
, когда у меня есть PropertyInfo
для GetToIt
?
Flawless; GetgenericArguments действительно был тем местом, где я искал решение, но у меня не было бы сразу искать его в интерфейсах. благодаря – samy