Я занимаюсь проектом анализа сборки и столкнулся с проблемой.
Я хочу достичь списка всех интерфейсов, реализованных классом, но без производных интерфейсов (и интерфейсов, реализованных производными классами).
Вот пример, чтобы проиллюстрировать (из LinqPad, .Dump()
- это окно вывода на печать):
void Main()
{
typeof(A).GetInterfaces().Dump(); //typeof(IT), typeof(IT<Int32>)
typeof(B).GetInterfaces().Dump(); //typeof(IT<Int32>)
typeof(C).GetInterfaces().Dump(); //typeof(IT), typeof(IT<Int32>)
}
class C : A {}
class A : IT {}
class B : IT<int> {}
public interface IT : IT <int> {}
public interface IT<T> {}
Я бы хотел получить
typeof(A).GetInterfaces().Dump(); //typeof(IT)
typeof(B).GetInterfaces().Dump(); //typeof(IT<Int32>)
typeof(C).GetInterfaces().Dump(); //
Я нашел этот пост Type.GetInterfaces () только для объявленных интерфейсов с ответом
Type type = typeof(E);
var interfaces = type.GetInterfaces()
.Where(i => type.GetInterfaceMap(i).TargetMethods.Any(m => m.DeclaringType == type))
.ToList();
Но я смотрю, есть ли альтернатива, которая перебирает методы.
Есть ли способ достичь этого?