Using .Count() to test for emptiness works, but using .Any() makes the intent clearer, and the code more readable.
However, there are some cases where special attention should be paid:
EntityFramework or other ORM query, calling .Count() will cause executing a potentially
massive SQL query and could put a large overhead on the application database. Calling .Any() will also connect to the database, but
will generate much more efficient SQL. .Select() statements that create objects, a large amount of memory could
be unnecessarily allocated. Calling .Any() will be much more efficient because it will execute fewer iterations of the enumerable.
private static bool HasContent(IEnumerable<string> strings)
{
return strings.Count() > 0; // Noncompliant
}
private static bool HasContent2(IEnumerable<string> strings)
{
return strings.Count() >= 1; // Noncompliant
}
private static bool IsEmpty(IEnumerable<string> strings)
{
return strings.Count() == 0; // Noncompliant
}
private static bool HasContent(IEnumerable<string> strings)
{
return strings.Any();
}
private static bool HasContent2(IEnumerable<string> strings)
{
return strings.Any();
}
private static bool IsEmpty(IEnumerable<string> strings)
{
return !strings.Any();
}