Introduction
This article explains the various ways to make method parameters optional. This is a very common interview question in C# Interview Questions.
There are following 4 ways to make method parameters optional.
- Using parameter arrays
- Using method overloading
- Using parameter defaults
- Using OptionalAttribute that is present in the System.Runtime.InteropServices namespace
Using parameter arrays
using System;
namespace OptionalParameter
{
class Program
{
public static void Sum(int firstNumber, int secondNumber, params object[] restOfTheNumbers)
{
int result = firstNumber + secondNumber;
foreach (int i in restOfTheNumbers)
{
result += i;
}
Console.WriteLine("Total = " + result.ToString());
}
public static void Main()
{
// Sum of two numbers
Sum(10, 20);
// Sum of more than two numbers
Sum(10, 20, 30, 40, 50);
}
}
}
The Sum method allows us to add 2 or more numbers. The firstNumber and secondNumber parameters are mandatory, whereas the MoreNumbers parameter is optional.
Output
Note. A parameter array must be the last parameter in a formal parameter list. The following method will not compile and gives a compile time error.
public static void Sum(int firstNumber, params object[] moreNumbers, int secondNumber)
{
// Function implementation
}
Using method overloading
using System;
namespace OptionalParameter
{
class Program
{
public static void Sum(int firstNumber, int secondNumber, int[] moreNumbers)
{
int result = firstNumber + secondNumber;
if (moreNumbers != null)
{
foreach (int i in moreNumbers)
{
result += i;
}
}
Console.WriteLine("Sum = " + result);
}
public static void Sum(int firstNumber, int secondNumber)
{
int result = firstNumber + secondNumber;
Console.WriteLine("Sum = " + result);
}
public static void Main()
{
// Sum of two Numbers
Sum(10, 20);
// Sum of more than two numbers
Sum(10, 20, new int[] { 30, 40, 50 });
}
}
}
In the preceding example, I have two Sum methods that are overloaded or we can say there are 2 versions of the Sum method.
Output
Parameters optional by specifying parameter defaults
using System;
namespace OptionalParameter
{
class Program
{
public static void Sum(int firstNumber, int secondNumber, int[] moreNumbers = null)
{
int result = firstNumber + secondNumber;
if (moreNumbers != null)
{
foreach (int i in moreNumbers)
{
result += i;
}
}
Console.WriteLine("Sum = " + result);
}
public static void Main()
{
// Sum of two Numbers
Sum(10, 20);
// Sum of more than two numbers
Sum(10, 20, new int[] { 30, 40, 50 });
}
}
}
In the preceding example, I have set MoreNumbers=null by default and when I call Sum(10,20) then by default the value passed to MoreNumber=Null and when I call the same method like Sum(10,20, new int[]{30,40,50}) then it changes the default value.
Output
Example
using System;
namespace OptionalParameter
{
class Program
{
public static void Test(int a, int b = 5, int c = 10)
{
Console.WriteLine("a = " + a);
Console.WriteLine("b = " + b);
Console.WriteLine("c = " + c);
}
public static void Main()
{
// a = 3, b = 5, c = 10
Test(3);
// a = 2, b = 3, c = 10
Test(2, 3);
// a = 5, b = 4, c = 6
Test(5, 4, 6);
}
}
}
In the preceding example, the Test method contains the 3 parameters a, b, c but we have set b=5 and c=10 so here a parameter will be a required parameter and b and c are optional parameters.
Note. Optional parameters must appear after all the required parameters, in other words the following method will not compile.
Assigning a value to a specific optional parameter
The following sample shows how to assign a value to a specific optional parameter
using System;
namespace OptionalParameter
{
class Program
{
public static void Test(int a, int b = 5, int c = 10)
{
Console.WriteLine("a = " + a);
Console.WriteLine("b = " + b);
Console.WriteLine("c = " + c);
}
public static void Main()
{
Test(3);
Console.WriteLine();
Test(2, c: 3);
}
}
}
Output
Making method parameters optional using Optional Attribute
In this example, we will discuss OptionalAttribute in the System.Runtime.InteropServices namespace.
using System;
using System.Runtime.InteropServices;
namespace OptionalParameter
{
class Program
{
public static void Sum(int firstNumber, int secondNumber, [Optional] int[] moreNumbers)
{
int result = firstNumber + secondNumber;
if (moreNumbers != null)
{
foreach (int i in moreNumbers)
{
result += i;
}
}
Console.WriteLine("Sum = " + result);
}
public static void Main()
{
// Sum of two Numbers
Sum(10, 20);
// Sum of more than two numbers
Sum(10, 20, new int[] { 30, 40, 50 });
}
}
}
In the preceding example, we have a method Sum where two parameters are required, firstNumber and secondNumber, but the last parameter MoreNumber I have marked as an [Optional] attribute.
Output
Thank you. Happy Coding