gpt4 book ai didi

c# - OfType<>() 和 Where() 扩展中检查类型的区别

转载 作者:太空狗 更新时间:2023-10-29 20:00:12 31 4
gpt4 key购买 nike

除了可读性之外,以下 linq 查询之间的区别是什么以及我何时以及为什么要使用一个而不是另一个:

IEnumerable<T> items = listOfItems.Where(d => d is T).Cast<T>();

IEnumerable<T> items = listOfItems.OfType<T>();

更新:该死的,抱歉在尝试简化我的问题时引入了一些错误

最佳答案

让我们比较三种方法(注意泛型参数):

  1. listOfItems.Where(t => t is T)调用IEnumerable<X>仍会返回 IEnumerable<X>刚刚过滤为仅包含 T 类型的元素.

  2. listOfItems.OfType<T>()调用IEnumerable<X>将返回 IEnumerable<T>包含可以转换为类型 T 的元素.

  3. listOfItems.Cast<T>()调用IEnumerable<X>将返回 IEnumerable<T>包含转换为类型 T 的元素如果无法转换任何元素,则抛出异常。

listOfItems.Where(d => d is T).Cast<T>()基本上是做同样的事情两次 - Where过滤所有 T 的元素但仍保留类型 IEnumerable<X>然后 Cast再次尝试将它们转换为 T但这次返回IEumerable<T> .

关于c# - OfType<>() 和 Where() 扩展中检查类型的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012184/

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