千家信息网

.NET 6的TryGetNonEnumeratedCount方法怎么用

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解".NET 6的TryGetNonEnumeratedCount方法怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习".NET 6的Tr
千家信息网最后更新 2025年02月03日.NET 6的TryGetNonEnumeratedCount方法怎么用

本篇内容主要讲解".NET 6的TryGetNonEnumeratedCount方法怎么用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习".NET 6的TryGetNonEnumeratedCount方法怎么用"吧!

一、举例

尝试下列代码:

var b = new B();Console.WriteLine($@"{b.Count()}");var a = new A();Console.WriteLine($@"{a.Count()}");class A : IEnumerable{    public IEnumerator GetEnumerator()    {        throw new NotImplementedException();    }    IEnumerator IEnumerable.GetEnumerator()    {        throw new NotImplementedException();    }}class B : A,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)){    //使用其他方式获取元素数量}

到此,相信大家对".NET 6的TryGetNonEnumeratedCount方法怎么用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0