C#-How to use empty List<string> as optional parameter

Just use the null coalescing operator and an instance of empty List<string>

public void Process(string param1, List<string> param2 = null) 
{
    param2 = param2 ?? new List<string>();

    // or starting with C# 8
    param2 ??= new List<string>();
}

The problem with this is that if "param2" is null and you assign a new reference then it wouldn't be accessible in the calling context.


You may also do the following using default which IS a compile-time-constant (null in the case of a List<T>):

void DoSomething(List<string> lst = default(List<string>)) 
{
    if (lst == default(List<string>)) lst = new List<string>();
}

It is impossible. You should use method overloading instead.

public static void MyMethod(int x, List<string> y) { }
public static void MyMethod(int x)
{
    MyMethod(x, Enumerable<string>.Empty());
}

Tags:

C#

C# 4.0