gpt4 book ai didi

c# - System.Collections.IEnumerable 的 LINQ

转载 作者:行者123 更新时间:2023-11-30 14:49:07 25 4
gpt4 key购买 nike

LINQ Where()System.Collections.Generic.IEnumerable<T> 一起工作但如果实现的接口(interface)是 System.Collections.IEnumerable 则不能使用

我的问题是,为什么会这样?

更新:也许有点上下文,我想使用 .Where()Transform 上Unity 的类,它实现了 System.Collections.IEnumerable而不是 System.Collections.Generic.IEnumerable<Transform>即使它只有 Transforms作为 child ..所以我现在为 Transform 创建了一个扩展方法,请随意使用它:

/// <summary> Where-Filter implementation for transform to filter out specific children</summary>
public static IEnumerable<GameObject> WhereChild(this Transform s, Func<GameObject, bool> callback) {
List<GameObject> r = new List<GameObject>();
foreach (Transform cur in s) { if (callback(cur.gameObject)) { r.Add(cur.gameObject); } }
return r;
}

(如果您想处理变换而不是子游戏对象,请修改它,我更喜欢这种方式;)

最佳答案

因为大多数方法都是通用的,当你只得到 object 时没有什么意义秒。一些方法实际上声明为IEnumerable 上的扩展方法。而不是 IEnumerable<T> ,例如Cast<T>()OfType<T> ,两者都返回一个类型化的可枚举。

因此在您的情况下,您可以使用 Cast<object>()以最无用的方式获得 LINQ 的好处,因为 Where 的谓词object 不能真正合理地做很多事情无论如何都没有类型转换它。

关于c# - System.Collections.IEnumerable 的 LINQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com