Очевидно, что невозможно привести WhereEnumerableIterator<IX>
к IEnumerable<X:IX>
public interface IX
public class X1 : IX
public class X2 : IX
public void Method1(IEnumerable<IX> arg)
{
var filtered = arg.Where(e => e.GetType() == typeof(X2));
// filtered will be of type WhereEnumerableIterator<IX>
Method2(filtered as IEnumerable<X2>);
}
public void Method2(IEnumerable<X2> arg)
{
// at runtime arg will be null
}
Очевидно, что CLR не может привести WhereEnumerableIterator<IX>
к IEnumerable<X2>
и устанавливает нулевой результат (несколько загадочно).
Кажется логичным, что фильтр может быть применен к IEnumerable<IX>
, а результат выражен как IEnumerable<X:IX>
(без фактического перечисления).
Но как это сделать?