Дайте базовый класс Base
, я хочу написать метод Test, например:
private static bool Test(IEnumerable enumerable)
{
...
}
такой, что Test возвращает true, если тип o реализует какой-либо интерфейс IEnumerable<X>
, где X
происходит от Base
, так что если бы я сделал это:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
if (Test(enumerable))
{
return enumerable.Cast<Base>().Select(b => b.SomePropertyThatIsString);
}
return enumerable.Cast<object>().Select(o => o.ToString());
}
... что он будет делать правильно, используя Reflection. Я уверен, что нужно пройтись по всем интерфейсам этого типа, чтобы найти первый, соответствующий требованиям, но мне трудно найти общий IEnumerable<>
среди них.
Конечно, я мог бы рассмотреть это:
public static IEnumerable<string> Convert(IEnumerable enumerable)
{
return enumerable.Cast<object>().Select(o => o is Base ? ((Base)o).SomePropertyThatIsString : o.ToString());
}
... но думайте об этом как о мысленном эксперименте.