返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.NET 6新特性试用之TryGetNonEnumeratedCount 方法
  • 482
分享到

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

2024-04-02 19:04:59 482人浏览 独家记忆
摘要

目录前言:一、举例二、原理结论:前言: .NET 6新增了​​TryGetNonEnumeratedCount​​方法,计算可枚举类型的元素总数。 LINQ不是已经有了​​Count

前言:

.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 方法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

本文链接: https://lsjlt.com/news/142403.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .NET 6新特性试用之TryGetNonEnumeratedCount 方法
    目录前言:一、举例二、原理结论:前言: .NET 6新增了​​TryGetNonEnumeratedCount​​方法,计算可枚举类型的元素总数。 LINQ不是已经有了​​Count...
    99+
    2024-04-02
  • .NET 6的TryGetNonEnumeratedCount方法怎么用
    本篇内容主要讲解“.NET 6的TryGetNonEnumeratedCount方法怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“.NET 6的TryGetNonEnu...
    99+
    2023-06-29
  • .NET 6新特性试用之Nuget包验证
    目录前言:Demo结论:前言: 我们常常需要将.NET类库打包成Nuget包,以便多个项目公用。 一旦修改类库,​尽管代码可以运行​,并成功打包成新版本​,看起来一切正常​,​但是​...
    99+
    2024-04-02
  • .NET 6新特性试用之DateOnly和TimeOnly类型
    目录前言:举例​1.创建实例​​2.类型转换​​3.操作​结论:前言: 在.NET 6之前,没有方法来直接表示没有时间的日期(比如生日)或者没有日期的一天中的时间(比如闹钟)。 虽然...
    99+
    2024-04-02
  • .NET 6新特性试用之System.Text.Json功能改进
    目录前言:Demo​1.属性排序​​2.序列化通知​结论:前言: ​​System.Text.Json​​作为.NET默认的JSON序列化和反序列化类库,让我们看看,在.NET 6中...
    99+
    2024-04-02
  • .NET 6新特性试用之常量内插字符串
    目录前言:常量内插字符串结论:前言: 编写代码时,我们常常需要组合字符串。 如下代码: string scheme = "https"; string host = "xxx.com...
    99+
    2024-04-02
  • .NET6新特性试用Timer类之PeriodicTimer
    目录前言:一、Demo结论:前言: 在.NET中,已经存在了5个Timer类: System.Threading.Timer System.Timers.Timer System.W...
    99+
    2024-04-02
  • Java8新特性之方法引用的使用方法
    这篇文章主要讲解了“Java8新特性之方法引用的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java8新特性之方法引用的使用方法”吧!一 前言日常开发中,经常使用到Lambda表达...
    99+
    2023-06-07
  • .NET 6 即将到来的新特性隐式命名空间引用
    目录1、Sample2、How it works3、More前言: 今天看到一个更新,可以不需要写 using了,目前还没有正式发布,应该要到 .NET 6 Preview 7 才...
    99+
    2024-04-02
  • JDK1.8新特性之方法引用 ::和Optional详解
    一:简介 方法引用分为三种,方法引用通过一对双冒号:: 来表示,方法引用是一种函数式接口的另一种书写方式 静态方法引用,通过类名::静态方法名, 如 Integer::pa...
    99+
    2024-04-02
  • Java8新特性之默认方法详解
    目录简介正文什么是默认方法为啥要提供默认方法呢?如果不提供呢?主要针对谁?实现了默认方法的接口和抽象类有区别吗是不是可以说Java现在也实现了多重继承?总结简介 在Java之前,我们...
    99+
    2024-04-02
  • .Net性能测试框架Crank的使用方法
    目录安装Crank创建Crank配置文件启动Crank-Agent启动Crank结果输出更多参考资料Crank 是微软新出的一个性能测试框架,集成了多种基准测试工具,如bombard...
    99+
    2024-04-02
  • 可用性测试如何做?这6种方法可助你一臂之力
    一个成功的软件一定是会以简化流程等方式为企业业务增加价值,所以企业在软件选型时甚至是选型之后一定要多多思考以下几个问题:软件项目是否能够带来期望的改进?用户会得到更好的体验吗?生产力是否会得到期望值的提高?用户对更改是否满意,并与之前的预期...
    99+
    2023-06-05
  • .NET 4.0中异常处理方面的新特性有哪些
    这篇文章将为大家详细讲解有关.NET 4.0中异常处理方面的新特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。作为程序员,我想很多人应该都有过跟异常打交道的经历。而且相信也有很多人也都写过catc...
    99+
    2023-06-17
  • 在.NET 6中使用日志组件log4net的方法
    本文将简单介绍在.NET 6中使用log4net的方法,具体见下文范例。 1.首先新建一个ASP.NET Core空项目 2.通过Nuget包管理器安装下面两个包 log4net...
    99+
    2024-04-02
  • Java8新特性之接口中的默认方法和静态方法详解
    目录一、前言二、为什么在 Java 接口中使用默认方法?三、为什么在 Java 接口中使用静态方法?四、场景一:接口中的默认方法五、场景二:接口中的静态方法六、情景三:多重继承 - ...
    99+
    2024-04-02
  • C#新特性之可空引用类型
    安装 您必须下载Visual Studio 2017 15.5预览版(目前最新发布版本是15.4),下载地址:https://www.visualstudio.com/en-us/n...
    99+
    2024-04-02
  • Go1.18新特性之泛型怎么使用
    本篇内容主要讲解“Go1.18新特性之泛型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go1.18新特性之泛型怎么使用”吧!01 Go中的泛型是什么众所周知,Go是一门静态类型的语言。...
    99+
    2023-06-30
  • Java 1.5新特性Enum的用法
    Enum是enumeration(列举)的简写形式,包含在java.lang包中.public enum Season { winter, spring, summer, fall }一个enum是定义一组值的对象,它可以包括零个或多个值成...
    99+
    2023-06-03
  • .NET 6开发TodoList应用之实现DELETE请求与HTTP请求幂等性
    目录需求目标原理与思路实现验证总结需求 先说明一下关于原本想要去更新的PATCH请求的文章,从目前试验的情况来看,如果是按照.NET 6的项目结构(即只使用一个Program.cs完...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作