.NET?6新特性試用之TryGetNonEnumeratedCount?方法
前言:
.NET 6新增了??TryGetNonEnumeratedCount??方法,計(jì)算可枚舉類型的元素總數(shù)。
LINQ不是已經(jīng)有了??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();
? ? }
}你會(huì)發(fā)現(xiàn),??b.Count()???能夠執(zhí)行,而??a.Count()??會(huì)報(bào)錯(cuò):

二、原理
這是由LINQ內(nèi)部實(shí)現(xiàn)造成的。
對(duì)于某些集合類型,如果無法快速確定集合元素?cái)?shù)量——例如Count屬性,調(diào)用??Count()??則必須枚舉整個(gè)集合以確定元素的數(shù)量。
在某些情況下,枚舉會(huì)嚴(yán)重影響程序性能,比如EF Core下使用??IQueryable.Count()??就需要訪問數(shù)據(jù)庫獲取全部記錄才能計(jì)數(shù)。
因此,更高效地計(jì)算序列中的元素?cái)?shù),就是使用??TryGetNonEnumeratedCount??方法,如果可以快速計(jì)數(shù),該方法將返回true并將計(jì)數(shù)作為out變量返回。
結(jié)論:
建議你始終使用以下格式代碼,去獲取可枚舉類型的元素總數(shù):
if (!enumerable.TryGetNonEnumeratedCount(out var count))
{
? ? //使用其他方式獲取元素?cái)?shù)量
}到此這篇關(guān)于.NET 6新特性試用之TryGetNonEnumeratedCount 方法的文章就介紹到這了,更多相關(guān)TryGetNonEnumeratedCount 方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ASP.NET MVC5網(wǎng)站開發(fā)我的咨詢列表及添加咨詢(十二)
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5網(wǎng)站開發(fā)我的咨詢列表及添加咨詢,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-09-09
ASP.NET Ajax級(jí)聯(lián)DropDownList實(shí)現(xiàn)代碼
我想大家對(duì)Ajax已耳熟能詳。自web 2.0概念出現(xiàn)以后,提供更好的用戶體驗(yàn)變得越來越重要。那么今天我來講解一下如何使用ASP.NET Ajax和web service構(gòu)建無刷新級(jí)聯(lián)DropDownList(以下簡稱為級(jí)聯(lián)DDL)。完成的效果圖2008-12-12
.NET Core 3.0 可回收程序集加載上下文的實(shí)現(xiàn)
這篇文章主要介紹了.NET Core 3.0 可回收程序集加載上下文的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
為ASP.NET Core強(qiáng)類型配置對(duì)象添加驗(yàn)證的方法
這篇文章主要給大家介紹了關(guān)于如何為ASP.NET Core強(qiáng)類型配置對(duì)象添加驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
.NET運(yùn)行界面上,實(shí)現(xiàn)隨意拖動(dòng)控件的方法
.NET運(yùn)行界面上,實(shí)現(xiàn)隨意拖動(dòng)控件的方法,需要的朋友可以參考一下2013-03-03

