CA1860: Avoid using 'Enumerable.Any()' extension method
Property | Value |
---|---|
Rule ID | CA1860 |
Title | Avoid using 'Enumerable.Any()' extension method |
Category | Performance |
Fix is breaking or non-breaking | Non-breaking |
Enabled by default in .NET 8 | As suggestion |
Cause
Enumerable.Any is called on a type that has a Length
, Count
, or IsEmpty
property.
Rule description
To determine whether a collection type has any elements, it's more efficient and clearer to use the Length
, Count
, or IsEmpty
(if possible) properties than to call the Enumerable.Any method.
Any()
, which is an extension method, uses language integrated query (LINQ). It's more efficient to rely on the collection's own properties, and it also clarifies intent.
Note
This rule is similar to CA1827: Do not use Count()/LongCount() when Any() can be used. However, that rule applies to the Linq Count()
method, while this rule suggests using the Count
property.
How to fix violations
Replace a call to Any() with a call to the collection's Length
, Count
, or IsEmpty
property.
Example
The following code snippet shows a violation of CA1860:
bool HasElements(string[] strings)
{
return strings.Any();
}
Function HasElements(strings As String()) As Boolean
Return strings.Any()
End Function
The following code snippet fixes the violation:
bool HasElements(string[] strings)
{
return strings.Length > 0;
}
Function HasElements(strings As String()) As Boolean
Return strings.Length > 0
End Function
When to suppress warnings
It's safe to suppress this warning if performance isn't a concern.
Suppress a warning
If you just want to suppress a single violation, add preprocessor directives to your source file to disable and then re-enable the rule.
#pragma warning disable CA1860
// The code that's violating the rule is on this line.
#pragma warning restore CA1860
To disable the rule for a file, folder, or project, set its severity to none
in the configuration file.
[*.{cs,vb}]
dotnet_diagnostic.CA1860.severity = none
For more information, see How to suppress code analysis warnings.