.NET?6新特性試用之TryGetNonEnumeratedCount?方法
前言:
.NET 6新增了??TryGetNonEnumeratedCount??方法,計算可枚舉類型的元素總數。
LINQ不是已經有了??Count??方法嗎,為什么還要畫蛇添足呢?
下文來看看具體情況!??!
一、舉例
嘗試下列代碼:
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(); ? ? } }
你會發(fā)現(xiàn),??b.Count()???能夠執(zhí)行,而??a.Count()??會報錯:
二、原理
這是由LINQ內部實現(xiàn)造成的。
對于某些集合類型,如果無法快速確定集合元素數量——例如Count屬性,調用??Count()??
則必須枚舉整個集合以確定元素的數量。
在某些情況下,枚舉會嚴重影響程序性能,比如EF Core下使用??IQueryable.Count()??
就需要訪問數據庫獲取全部記錄才能計數。
因此,更高效地計算序列中的元素數,就是使用??TryGetNonEnumeratedCount
??方法,如果可以快速計數,該方法將返回true并將計數作為out變量返回。
結論:
建議你始終使用以下格式代碼,去獲取可枚舉類型的元素總數:
if (!enumerable.TryGetNonEnumeratedCount(out var count)) { ? ? //使用其他方式獲取元素數量 }
到此這篇關于.NET 6新特性試用之TryGetNonEnumeratedCount 方法的文章就介紹到這了,更多相關TryGetNonEnumeratedCount 方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用HttpClient消費ASP.NET Web API服務案例
這篇文章介紹了使用HttpClient消費ASP.NET Web API服務的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-10-10HttpWebRequest的常見錯誤使用TcpClient可避免
有時使用HttpWebRequest對象會出現(xiàn)錯誤有三種服務器提交了協(xié)議沖突/基礎連接已經關閉:連接被意外關閉/無法發(fā)送具有此謂詞類型的內容正文,感興趣的朋友可以參考下本文2013-02-02基于ASP.NET實現(xiàn)單點登錄(SSO)的示例代碼
SSO英文全稱Single?Sign?On(單點登錄)。SSO是在多個應用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統(tǒng)。本文為大家分享了基于ASP.NET實現(xiàn)單點登錄(SSO)的示例代碼,需要的可以參考一下2022-05-05ASP.NET?MVC打印表格并實現(xiàn)部分視圖表格打印
這篇文章介紹了ASP.NET?MVC打印表格并實現(xiàn)部分視圖表格打印的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08配置Visual Studio 以調試.net framework源代碼
看到.net框架代碼發(fā)布了,興奮了一下,把在Visual Studio 2008上配置的內容翻譯了一下,只翻譯了原文的基本步驟,高級用戶篇和QA沒有翻譯。2009-04-04詳解ASP.NET Core 處理 404 Not Found
這篇文章主要介紹了詳解ASP.NET Core 處理 404 Not Found,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10VS2022?.NET5一鍵發(fā)布到遠程騰訊云IIS服務器的詳細步驟
這篇文章主要介紹了VS2022?.NET5一鍵發(fā)布到遠程騰訊云IIS服務器,首先需要添加服務器相關功能,文中通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04