gpt4 book ai didi

C# LINQ 筛选 IEnumerable 并表示为 IEnumerable

转载 作者:行者123 更新时间:2023-11-30 14:21:33 27 4
gpt4 key购买 nike

显然不可能转换 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>并将结果设置为 null(有点神秘)。

过滤器可以应用于 IEnumerable<IX> 似乎合乎逻辑。结果表示为IEnumerable<X:IX> (实际上没有列举)。

但是如何做到这一点?

最佳答案

它发生了,因为 filteredIEnumerable<IX> (即使过滤后它只包含 X2 的项目)并且不能直接转换为 IEnumerable<X2> .
你可以这样做并转换你的 IEnumerable :

var filtered = arg.Where(e => e.GetType() == typeof(X2)).Cast<X2>();
// filtered will be of type WhereEnumerableIterator<X2> now
Method2(filtered);

但是你可以只使用 Enumerable.OfType 过滤 IEnumerable基于其元素的类型:

public void Method1(IEnumerable<IX> arg)
{
var filtered = arg.OfType<X2>();
Method2(filtered);
}

public void Method2(IEnumerable<X2> arg)
{

}

关于C# LINQ 筛选 IEnumerable<IX> 并表示为 IEnumerable<X :IX>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54471250/

27 4 0