C# String.Format optional parameters

Kernel Med picture Kernel Med · Dec 8, 2014 · Viewed 9.2k times · Source

I want to use string.Format with optional parameters :

public static void Main(string[] args)
{
    // Your code goes here
    // Console.WriteLine(string.Format("{0} {1}", "a", "b"));
    Console.WriteLine(string.Format("{0} {1}", "a"));
}

for exemple the parameter {1} to be optional and to have a default value

Can you help me to do this?

Answer

Heinzi picture Heinzi · Dec 8, 2014

It depends on what you mean by "optional parameter".

If you want to automatically replace null with a default value, the easiest way to do that is to use the null coalescing operator inside the arguments:

String.Format("{0} {1}", 
              "a",
              someNullableVariableContainingB ?? "default value");

If you want to reuse the same formatting string for multiple String.Format invocations, e.g.

var myFormatString = "{0} {1}";
var string1 = String.Format(myFormatString, "a", "b");
var string2 = String.Format(myFormatString, "a");

then you are out of luck: String.Format will throw an exception if too few arguments are provided, and there's no way to specify an "optional parameter" inside the format string. You will have to use something other than String.Format, for example, a custom method which replaces missing arguments with their intended default values.