从转换为对象的不同 IEnumerable 的组合列表中检索特定类型的 IEnumerable

Retrieve IEnumerable of specific type from combined list of different IEnumerables casted as Object

我转换了不同类型的 IEnumerables 并将它们传递到列表中。

combinedAll = ((TypeOneIenumerable).Cast<object>()).ToList().Concat(((TypeTwoIenumerable).Cast<object>())).Concat(((TypeThreeIenumerable).Cast<object>()));

我正在检索此列表作为

var combined = (IEnumerable<object>)value;

现在,

我想根据 IEnumerables 的特定类型来分离它们。 我想做这样的事情:

var getBackTypeOneIenumerable = (IEnumerable<TypeOneIenumerable>)value;

这样我就可以在 getBackTypeOneIenumerable 上执行 Select/Where。

您可以使用 Enumerable.OfType 过滤和投射:

IEnumerable<TypeOneIenumerable> getBackTypeOneIenumerable = combinedAll.OfType<TypeOneIenumerable>();

顺便说一句,您在查询中的 ToList 调用是多余的,它会无缘无故地创建一个新列表。

你可以这样把所有的东西都放在一起:

IEnumerable<TypeOneIenumerable> getBackTypeOneIenumerable = TypeOneIenumerable.OfType<TypeOneIenumerable>()
    .Concat(TypeTwoIenumerable.OfType<TypeOneIenumerable>())
    .Concat(TypeThreeIenumerable.OfType<TypeOneIenumerable>());