S1168 — Empty arrays and collections should be returned instead of null

Language
C#
Type
Code smell
Severity
Major

Why is this an issue?

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.

↑ Back to top