![](/img/trans.png)
[英]Are there any performance difference between these 2 linq queries, are they identical or essentially different?
[英]Is there any performance difference between different linq usage ordering?
IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();
對比
IEnumerable<Element>.FirstOrDefault().Cast<SomeClass>();
我問的原因是,我在網上看到很多例子都是以第一種方式使用它。 但是,第二個 linq 序列在性能方面是否更好,因為它避免了首先轉換 IEnumerable 中的所有元素? 或者也許第一個更安全? 還是他們實際上在后台做着完全相同的事情?
IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();
可能是想要你想要的,但答案與性能無關。
除非Element
是IEnumerable
,否則對FirstOrDefault()
的結果使用Cast()
是沒有意義的,並且會導致編譯錯誤。
假設您的意思是(SomeClass)(IEnumerable<Element>.FirstOrDefault());
對於第二種情況,這也是有問題的,因為如果IEnumerable<Element>
為空,那么如果Element
是引用類型,則FirstOrDefault()
將返回null
,如果它是值類型,則返回默認構造Element
。 如果IEnumerable<Element>
為空並且SomeClass
是值類型,則最好默認構造SomeClass
,而不是嘗試從Element
強制轉換為SomeClass
。
IEnumerable<Element>.Cast<SomeClass>().FirstOrDefault();
從Element
到SomeClass
最多只能執行一次轉換,因為 LINQ 鏈是惰性枚舉的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.