c# - 不同的 linq 使用顺序之间有性能差异吗?

标签 c# performance linq

IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();

对比

IEnumerable<Element>.FirstOrDefault().Cast<SomeClass>();

我之所以问这个问题,是因为我在网上看到很多使用第一种方式的例子。 但是,第二个 linq 序列在性能方面是否更好,因为它避免了首先强制转换 IEnumerable 中的所有元素?或者也许第一个更安全?或者他们实际上在后台做着完全相同的事情?

最佳答案

IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault(); 可能是你想要的,但答案与性能无关。

除非ElementIEnumerable ,使用 Cast() 没有意义关于 FirstOrDefault() 的结果,并且会导致编译错误。

假设您的意思是(SomeClass)(IEnumerable<Element>.FirstOrDefault());对于你的第二种情况,这也是有问题的,因为如果 IEnumerable<Element>为空,则FirstOrDefault()将返回null如果Element是引用类型,或默认构造 Element如果它是值类型。最好使用默认构造 SomeClass如果 IEnumerable<Element>为空且 SomeClass是一个值类型,而不是尝试从 Element 进行转换至SomeClass .

IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();最多只会执行 Element 中的一次转换至SomeClass因为 LINQ 链是惰性枚举的。

关于c# - 不同的 linq 使用顺序之间有性能差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67393607/

相关文章:

c# - DevExpress:通过代码设置数据源和列标题

c# - 创建动态 html C#

mysql - MySQL 如何处理 IN 谓词

android - 使用 AsyncTask for Android ListView 更新图像缩略图不正确

c# - LINQ to Entities .Contains 元组(2 个外键)

c# - TableCellCollection 上的 Linq - C#

C# 确定字典中的值

c# - 正则表达式匹配字符串中的 "time"值

sql - 关于 Django 中的嵌套集合和查询效率的问题

c# - 如何为 Last.fm api 可靠地签署请求?