欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

.NET 6新特性试用之TryGetNonEnumeratedCount 方法

时间:2022-09-27 11:11:39|栏目:.NET代码|点击:

前言:

.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();
    }
}

你会发现,??b.Count()???能够执行,而??a.Count()??会报错: 

二、原理

这是由LINQ内部实现造成的。

对于某些集合类型,如果无法快速确定集合元素数量——例如Count属性,调用??Count()??则必须枚举整个集合以确定元素的数量。

在某些情况下,枚举会严重影响程序性能,比如EF Core下使用??IQueryable.Count()??就需要访问数据库获取全部记录才能计数。

因此,更高效地计算序列中的元素数,就是使用??TryGetNonEnumeratedCount??方法,如果可以快速计数,该方法将返回true并将计数作为out变量返回。

结论:

建议你始终使用以下格式代码,去获取可枚举类型的元素总数:

if (!enumerable.TryGetNonEnumeratedCount(out var count))
{
    //使用其他方式获取元素数量
}

上一篇:ASP.NET Core配置和管理Web主机

栏    目:.NET代码

下一篇:mvc上传到美橙云虚拟机系列问题的解决方法

本文标题:.NET 6新特性试用之TryGetNonEnumeratedCount 方法

本文地址:http://www.codeinn.net/misctech/214846.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有