.NET 6新特性试用 | TryGetNonEnumeratedCount
生活随笔
收集整理的這篇文章主要介紹了
.NET 6新特性试用 | TryGetNonEnumeratedCount
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
.NET 6新增了TryGetNonEnumeratedCount方法,計算可枚舉類型的元素總數。
LINQ不是已經有了Count方法嗎,為什么還要畫蛇添足呢?
Demo
嘗試下列代碼:
var?b?=?new?B<int>(); Console.WriteLine($@"{b.Count()}");var?a?=?new?A<int>(); Console.WriteLine($@"{a.Count()}");class?A<T>?:?IEnumerable<T> {public?IEnumerator<T>?GetEnumerator(){throw?new?NotImplementedException();}IEnumerator?IEnumerable.GetEnumerator(){throw?new?NotImplementedException();} }class?B<T>?:?A<T>,ICollection {public?int?Count?=>?10086;public?bool?IsSynchronized?=>?throw?new?NotImplementedException();public?object?SyncRoot?=>?throw?new?NotImplementedException();public?void?CopyTo(Array?array,?int?index){throw?new?NotImplementedException();} }你會發現,b.Count()能夠執行,而a.Count()會報錯:?
原理
這是由LINQ內部實現造成的。
對于某些集合類型,如果無法快速確定集合元素數量——例如Count屬性,調用Count()則必須枚舉整個集合以確定元素的數量。
在某些情況下,枚舉會嚴重影響程序性能,比如EF Core下使用IQueryable.Count()就需要訪問數據庫獲取全部記錄才能計數。
因此,更高效地計算序列中的元素數,就是使用TryGetNonEnumeratedCount方法,如果可以快速計數,該方法將返回true并將計數作為out變量返回。
結論
建議你始終使用以下格式代碼,去獲取可枚舉類型的元素總數:
if?(!enumerable.TryGetNonEnumeratedCount(out?var?count)) {//使用其他方式獲取元素數量 }如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“
總結
以上是生活随笔為你收集整理的.NET 6新特性试用 | TryGetNonEnumeratedCount的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET 云原生架构师训练营(系统架构)
- 下一篇: 在 .NET Core 中如何让 Ent