IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();
对比
IEnumerable<Element>.FirstOrDefault().Cast<SomeClass>();
我之所以问这个问题,是因为我在网上看到很多使用第一种方式的例子。 但是,第二个 linq 序列在性能方面是否更好,因为它避免了首先强制转换 IEnumerable 中的所有元素?或者也许第一个更安全?或者他们实际上在后台做着完全相同的事情?
最佳答案
IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();
可能是你想要的,但答案与性能无关。
除非Element
是 IEnumerable
,使用 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/