45 lines
1.5 KiB
Plaintext
45 lines
1.5 KiB
Plaintext
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:
|
|
|
|
* if the collection is an ``++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.
|
|
* if the collection is part of a LINQ query that contains ``++.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.
|
|
|
|
== Noncompliant Code Example
|
|
|
|
----
|
|
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
|
|
}
|
|
----
|
|
|
|
== Compliant Solution
|
|
|
|
----
|
|
private static bool HasContent(IEnumerable<string> strings)
|
|
{
|
|
return strings.Any();
|
|
}
|
|
|
|
private static bool IsEmpty(IEnumerable<string> strings)
|
|
{
|
|
return !strings.Any();
|
|
}
|
|
----
|
|
|
|
ifdef::rspecator-view[]
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::rspecator-view[]
|