值
规则 ID
CA1836
类别
“性能”
修复是中断修复还是非中断修复
非中断
原因
使用了 Count 或 Length 属性或 Count<TSource>(IEnumerable<TSource>) 扩展方法,通过将值与 0 或 1 进行比较来确定对象是否包含任何项,以及对象是否具有更有效的 IsEmpty 属性可以代替使用。
规则说明
当将 Count 和 Length 属性或 Count<TSource>(IEnumerable<TSource>) 和 LongCount<TSource>(IEnumerable<TSource>) LINQ 方法用于确定对象是否包含任何项以及对象是否具有更有效的 IsEmpty 属性时,此规则将标记对它们的调用。
此规则的分析最初与类似规则 CA1827、CA1828 和 CA1829 重叠,这些规则的分析器与 CA1836 的分析器合并在一起,以在发生重叠时报告最佳诊断。
如何解决冲突
若要解决冲突,在使用 IsEmpty 属性访问来确定对象是否为空的操作中,当使用 Count<TSource>(IEnumerable<TSource>) 或 LongCount<TSource>(IEnumerable<TSource>) 方法调用或 Length 或 Count 属性访问时,请将其替换。 例如,以下两个代码片段显示了规则冲突及其解决方法:
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.Count == 0;
}
using System.Collections.Concurrent;
class C
{
ConcurrentQueue<int> _queue;
public bool IsEmpty => _queue.IsEmpty;
}
提示
Visual Studio 中为此规则提供了代码修补程序。 若要使用它,请将光标置于冲突上,然后按 Ctrl+。 (句点)。 从显示的选项列表中选择“最好使用’IsEmpty’而不是‘Count’”来确定对象是否包含任何项。
何时禁止显示警告
如果不关心不必要的项枚举是否会对计数计算的性能产生影响,可禁止显示此规则的冲突警告。
相关规则
CA1827:如果可以使用 Any,请勿使用 Count/LongCount
CA1828:如果可以使用 AnyAsync,请勿使用 CountAsync/LongCountAsync
CA1829:如果可以使用 AnyAsync,请勿使用 CountAsync/LongCountAsync
另请参阅
性能规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。