Returning null
or default
instead of an actual collection forces the method callers to explicitly test for null, making
the code more complex and less readable.
Moreover, in many cases, null
or default
is used as a synonym for empty.
Noncompliant code example
public Result[] GetResults()
{
return null; // Noncompliant
}
public IEnumerable<Result> GetResults(bool condition)
{
var results = GenerateResults();
return condition
? results
: null; // Noncompliant
}
public IEnumerable<Result> GetResults() => null; // Noncompliant
public IEnumerable<Result> Results
{
get
{
return default(IEnumerable<Result>); // Noncompliant
}
}
public IEnumerable<Result> Results => default; // Noncompliant
Compliant solution
public Result[] GetResults()
{
return new Result[0];
}
public IEnumerable<Result> GetResults(bool condition)
{
var results = GenerateResults();
return condition
? results
: Enumerable.Empty<Result>();
}
public IEnumerable<Result> GetResults() => Enumerable.Empty<Result>();
public IEnumerable<Result> Results
{
get
{
return Enumerable.Empty<Result>();
}
}
public IEnumerable<Result> Results => Enumerable.Empty<Result>();
Exceptions
Although string
is a collection, the rule won’t report on it.