How to handle empty collections in C#

Handling empty collections in C# is a common scenario that can lead to runtime errors if not managed properly. The DefaultIfEmpty() method from LINQ provides an elegant solution to work with empty collections by returning a default value when the collection contains no elements.

When working with collections, you often need to ensure that operations don't fail on empty collections. The DefaultIfEmpty() method prevents exceptions and provides predictable behavior.

Syntax

Following is the syntax for using DefaultIfEmpty() method −

collection.DefaultIfEmpty()
collection.DefaultIfEmpty(defaultValue)

Parameters

  • defaultValue (optional) − The value to return if the collection is empty. If not specified, the default value for the type is used.

Return Value

Returns an IEnumerable<T> containing either the original collection elements or a single default element if the collection is empty.

Using DefaultIfEmpty() with Default Values

Example

using System;
using System.Linq;
using System.Collections.Generic;

class Demo {
    static void Main() {
        List<float> myList = new List<float>();
        var res = myList.DefaultIfEmpty();
        
        Console.WriteLine("Empty collection with default value:");
        foreach (var a in res) {
            Console.WriteLine(a);
        }
        
        // Non-empty collection
        List<float> numbers = new List<float> { 1.5f, 2.7f, 3.2f };
        var res2 = numbers.DefaultIfEmpty();
        
        Console.WriteLine("\nNon-empty collection:");
        foreach (var num in res2) {
            Console.WriteLine(num);
        }
    }
}

The output of the above code is −

Empty collection with default value:
0

Non-empty collection:
1.5
2.7
3.2

Using DefaultIfEmpty() with Custom Default Values

Example

using System;
using System.Linq;
using System.Collections.Generic;

class Program {
    static void Main() {
        List<string> emptyList = new List<string>();
        List<int> emptyNumbers = new List<int>();
        
        // String collection with custom default
        var stringResult = emptyList.DefaultIfEmpty("No items found");
        Console.WriteLine("String collection result:");
        foreach (var item in stringResult) {
            Console.WriteLine(item);
        }
        
        // Integer collection with custom default
        var numberResult = emptyNumbers.DefaultIfEmpty(-1);
        Console.WriteLine("\nInteger collection result:");
        foreach (var num in numberResult) {
            Console.WriteLine(num);
        }
    }
}

The output of the above code is −

String collection result:
No items found

Integer collection result:
-1

Practical Use Cases

Example with LINQ Operations

using System;
using System.Linq;
using System.Collections.Generic;

class Employee {
    public string Name { get; set; }
    public decimal Salary { get; set; }
}

class Program {
    static void Main() {
        List<Employee> employees = new List<Employee>();
        
        // Calculate average salary, handling empty collection
        var averageSalary = employees
            .Select(e => e.Salary)
            .DefaultIfEmpty(0)
            .Average();
            
        Console.WriteLine($"Average salary: ${averageSalary}");
        
        // Get maximum salary, handling empty collection
        var maxSalary = employees
            .Select(e => e.Salary)
            .DefaultIfEmpty(0)
            .Max();
            
        Console.WriteLine($"Maximum salary: ${maxSalary}");
    }
}

The output of the above code is −

Average salary: $0
Maximum salary: $0

Comparison of Handling Empty Collections

Method Empty Collection Behavior Use Case
DefaultIfEmpty() Returns default value, no exception LINQ operations, safe iteration
Any() Returns false for empty collections Checking if collection has elements
Count > 0 Returns false for empty collections Simple empty check
FirstOrDefault() Returns default value Getting first element safely

Conclusion

The DefaultIfEmpty() method is essential for safe collection handling in C#. It prevents exceptions when working with potentially empty collections and allows you to specify meaningful default values. This method is particularly useful in LINQ operations where empty collections could cause runtime errors.

Updated on: 2026-03-17T07:04:35+05:30

483 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements