前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA1827:如果可以使用 Any,请勿使用 Count/LongCount

CA1827:如果可以使用 Any,请勿使用 Count/LongCount

作者头像
用户4268038
发布于 2022-02-19 10:44:50
发布于 2022-02-19 10:44:50
6130
举报
文章被收录于专栏:stcnbstcnb

规则 ID

CA1827

类别

“性能”

修复是中断修复还是非中断修复

非中断

原因

在使用 Any 方法会更有效的情况下使用了 Count 或 LongCount 方法。

规则说明

此规则将标记 Count 和 LongCount LINQ 方法调用,用于检查集合是否至少有一个元素。 这些方法调用需要枚举整个集合来计算计数。 使用 Any 方法进行相同的检查速度更快,因为它可以避免枚举集合。

如何解决冲突

若要解决冲突,请将 Count 或 LongCount 方法调用替换为 Any 方法。 例如,以下两个代码片段显示了规则冲突及其解决方法:

using System.Collections.Generic;

using System.Linq;

class C

{

public string M1(IEnumerable<string> list)

=> list.Count() != 0 ? "Not empty" : "Empty";

public string M2(IEnumerable<string> list)

=> list.LongCount() > 0 ? "Not empty" : "Empty";

}

using System.Collections.Generic;

using System.Linq;

class C

{

public string M1(IEnumerable<string> list)

=> list.Any() ? "Not empty" : "Empty";

public string M2(IEnumerable<string> list)

=> list.Any() ? "Not empty" : "Empty";

}

提示

Visual Studio 中为此规则提供了代码修补程序。 若要使用它,请将光标置于数组冲突上,然后按 Ctrl+。 (句点)。 从提供的选项列表中,选择“如果可以使用 Any(),请勿使用 Count() 或 LongCount()”。

何时禁止显示警告

如果不关心不必要的集合枚举计算计数对性能产生的影响,则可禁止显示此规则的冲突警告。

相关规则

CA1826:使用属性,而不是 Linq Enumerable 方法

CA1828:如果可以使用 AnyAsync,请勿使用 CountAsync/LongCountAsync

CA1829:使用 Length/Count 属性,而不是 Enumerable.Count 方法

另请参阅

性能规则

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
CA1828:如果可以使用 AnyAsync,请勿使用 CountAsync/LongCountAsync
在使用 AnyAsync 方法会更有效的情况下使用了 CountAsync 或 LongCountAsync 方法。
用户4268038
2022/02/19
6390
CA1829:使用 Length/Count 属性,而不是 Enumerable.Count 方法
对支持等效且更高效的 Length 或 Count 属性的类型使用了 Count LINQ 方法。
用户4268038
2022/02/19
5400
CA1836:可用时最好使用 IsEmpty (而不是 Count)
使用了 Count 或 Length 属性或 Count<TSource>(IEnumerable<TSource>) 扩展方法,通过将值与 0 或 1 进行比较来确定对象是否包含任何项,以及对象是否具有更有效的 IsEmpty 属性可以代替使用。
用户4268038
2022/02/19
5010
CA1826:使用属性,而不是 Linq Enumerable 方法
此规则在具有等效但更高效的属性的类型集合上标记 Enumerable LINQ 方法调用,以提取相同的数据。
用户4268038
2022/02/19
6670
CA1841:首选字典包含方法
此规则可找到在 IDictionary<TKey,TValue> 的 Keys 或 Values 集合上对 Contains 方法的调用,这些调用可替换为在字典本身对 ContainsKey 或 ContainsValue 方法的调用。
呆呆
2022/02/26
3680
CA2009:请勿对 ImmutableCollection 值调用 ToImmutableCollection
对 System.Collections.Immutable 命名空间中的不可变集合不必要地调用了 ToImmutable 方法。
用户4268038
2022/02/26
3840
CA1010:集合应实现泛型接口
类型实现 System.Collections.IEnumerable 接口,但不能实现 System.Collections.Generic.IEnumerable<T> 接口和包含程序集的目标 .NET。 此规则会忽略能够实现 System.Collections.IDictionary 的类型。
用户4268038
2022/01/10
6590
性能规则
某个字段被声明为 static 和 read-only(在 Visual Basic 中为 Shared 和 ReadOnly),并使用可在编译时计算的值初始化。 因为赋给目标字段的值可在编译时计算,因此请将声明更改为 const(在 Visual Basic 中为 Const)字段,以便在编译时而非运行时计算值。
呆呆
2022/02/19
9490
是什么优化让 .NET Core 性能飙升?
.NET Core(开放源代码,跨平台,x-copy可部署等)有许多令人兴奋的方面,其中最值得称赞的就是其性能了。
葡萄城控件
2022/05/09
1.1K0
CA1711:标识符应采用正确的后缀
按照约定,只有扩展某些基类型或实现某些接口的类型的名称或者从这些类型派生的类型的名称,应以特定的保留后缀结尾。 其他类型名称不应使用这些保留的后缀。
呆呆
2022/02/18
3570
Linq快速入门——Lambda表达式的前世今生
Lambda表达式其实并不陌生,他的前生就是匿名函数,所以要谈Lambda表达式,就不得不谈匿名函数,要谈匿名函数,那又要不得不谈委托。 何为委托 匿名方法 Lambda表达式 扩展方法 泛型委托 A Simple Lambda Demo Lambda表达式树 何为委托 委托非常好理解,类似于C++里面的函数指针(指向了一个方法),并且委托约束了待指向方法的签名(由返回类型和参数组成)。 using System; using System.Collections.Generic; using Syst
用户1161731
2018/01/11
1.4K0
Linq快速入门——Lambda表达式的前世今生
CA3001:查看 SQL 注入漏洞的代码
使用不受信任的输入和 SQL 命令时,请注意防范 SQL 注入攻击。 SQL 注入攻击可以执行恶意的 SQL 命令,从而降低应用程序的安全性和完整性。 典型的技术包括使用单引号或撇号分隔文本字符串,在注释中使用两个短划线,以及在语句末尾使用分号。 有关详细信息,请参阅 SQL Injection。
呆呆
2022/02/20
7210
CA1834:对单字符字符串使用 StringBuilder.Append(char)
使用单位长度字符串调用 StringBuilder.Append 时,请考虑使用 const char 而不是单位长度 const string 来提高性能。
用户4268038
2022/02/19
6180
CA1846:首选 AsSpan 次选 Substring
对其中一个 String.Substring 重载的调用结果被传递给具有接受 ReadOnlySpan<Char> 的可用重载的方法。
呆呆
2022/02/26
9840
CA1700:不要用“Reserved”命名枚举值
此规则假定当前不使用名称中包含“reserved”的枚举成员,而是将其作为一个占位符,以在将来的版本中重命名或移除它。 重命名或移除成员是一项重大更改。 不应期望用户仅因为成员名称包含“reserved”而忽略该成员,也不能指望用户阅读或遵守文档。 此外,由于预留成员显示在对象浏览器和智能集成开发环境中,因此他们可能会造成混淆,以致于不知道实际使用哪些成员。
呆呆
2022/02/18
5340
CA3004:查看信息泄露漏洞的代码
泄漏异常信息可让攻击者深入了解应用程序的内部机制,从而帮助攻击者找到其他漏洞并利用这些漏洞。
呆呆
2022/02/20
6800
CA1041:提供 ObsoleteAttribute 消息
类型和成员使用了未指定其 System.ObsoleteAttribute.Message 属性的 System.ObsoleteAttribute 特性进行标记。
呆呆
2022/01/10
3090
CA3008:查看 XPath 注入漏洞的代码
处理不受信任的输入时,请注意防范 XPath 注入攻击。 使用不受信任的输入构造 XPath 查询可能会允许攻击者恶意控制查询,使其返回一个意外的结果,并可能泄漏查询的 XML 的内容。
呆呆
2022/02/20
8250
CA3007:查看公开重定向漏洞的代码
处理不受信任的输入时,请注意防范开放重定向漏洞。 攻击者可以利用开放重定向漏洞,使用你的网站提供合法 URL 的外观,但将毫不知情的访客重定向到钓鱼网页或其他恶意网页。
呆呆
2022/02/20
9250
CA1714:Flags 枚举应采用复数形式的名称
枚举具有 System.FlagsAttribute,并且其名称不是以“s”结尾。
呆呆
2022/02/18
4700
推荐阅读
相关推荐
CA1828:如果可以使用 AnyAsync,请勿使用 CountAsync/LongCountAsync
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档