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

 更新时间:2022年03月15日 10:54:17   作者:My IO  
这篇文章主要介绍了.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();
    }
}

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

二、原理

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

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

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

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

结论:

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

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

到此这篇关于.NET 6新特性试用之TryGetNonEnumeratedCount 方法的文章就介绍到这了,更多相关TryGetNonEnumeratedCount 方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • asp.net session丢失的解决方法小结

    asp.net session丢失的解决方法小结

    正常操作情况下会有ASP.NET Session丢失的情况出现。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。
    2011-02-02
  • .NET中基于事件的异步模式-EAP

    .NET中基于事件的异步模式-EAP

    从.NET 4.5开始,支持的三种异步编程模式:基于事件的异步编程设计模式、异步编程模型、基于任务的编程模型,感兴趣的朋友可以参考下
    2013-01-01
  • ASP.NET MVC5网站开发我的咨询列表及添加咨询(十二)

    ASP.NET MVC5网站开发我的咨询列表及添加咨询(十二)

    这篇文章主要为大家详细介绍了ASP.NET MVC5网站开发我的咨询列表及添加咨询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-09-09
  • ASP.NET Ajax级联DropDownList实现代码

    ASP.NET Ajax级联DropDownList实现代码

    我想大家对Ajax已耳熟能详。自web 2.0概念出现以后,提供更好的用户体验变得越来越重要。那么今天我来讲解一下如何使用ASP.NET Ajax和web service构建无刷新级联DropDownList(以下简称为级联DDL)。完成的效果图
    2008-12-12
  • 一个简答的Access下的分页asp.net代码

    一个简答的Access下的分页asp.net代码

    一个简答的Access下的分页asp.net代码
    2010-03-03
  • .NET Core 3.0 可回收程序集加载上下文的实现

    .NET Core 3.0 可回收程序集加载上下文的实现

    这篇文章主要介绍了.NET Core 3.0 可回收程序集加载上下文的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • 使用linq读取分隔符文本文件

    使用linq读取分隔符文本文件

    有时我们会处理一些带分隔符数据文本文件。例如,使用”,”分隔的数据,下面介绍下使用linq读取分隔符文本文件的方法
    2014-01-01
  • asp.net的公共变量声明问题(解决)

    asp.net的公共变量声明问题(解决)

    前段时间有个项目中登录的时候碰到了声明公共变量的情况,用户类型分为二种类型,所以不同类型用户登录的时候所走的情况不一样,目前用AB分别代表二类用户。
    2013-03-03
  • 为ASP.NET Core强类型配置对象添加验证的方法

    为ASP.NET Core强类型配置对象添加验证的方法

    这篇文章主要给大家介绍了关于如何为ASP.NET Core强类型配置对象添加验证的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • .NET运行界面上,实现随意拖动控件的方法

    .NET运行界面上,实现随意拖动控件的方法

    .NET运行界面上,实现随意拖动控件的方法,需要的朋友可以参考一下
    2013-03-03

最新评论