Does C# support a variable number of arguments, and how?

C#.NetVariablesArgumentsParams

C# Problem Overview


Does C# support a variable number of arguments?

If yes, How does C# support variable no of arguments?

What are the examples?

How are variable arguments useful?

EDIT 1: What are the restrictions on it?

EDIT 2: The Question is not about Optional param But Variable Param

C# Solutions


Solution 1 - C#

Yes. The classic example wourld be the params object[] args:

//Allows to pass in any number and types of parameters
public static void Program(params object[] args)

A typical usecase would be passing parameters in a command line environment to a program, where you pass them in as strings. The program has then to validate and assign them correctly.

Restrictions:

  • Only one params keyword is permitted per method
  • It has to be the last parameter.

EDIT: After I read your edits, I made mine. The part below also covers methods to achieve variable numbers of arguments, but I think you really were looking for the params way.


Also one of the more classic ones, is called method overloading. You've probably used them already a lot:

//both methods have the same name and depending on wether you pass in a parameter
//or not, the first or the second is used.
public static void SayHello() {
    Console.WriteLine("Hello");
}
public static void SayHello(string message) {
    Console.WriteLine(message);
}

Last but not least the most exiting one: Optional Arguments

//this time we specify a default value for the parameter message
//you now can call both, the method with parameter and the method without.
public static void SayHello(string message = "Hello") {
    Console.WriteLine(message);
}

http://msdn.microsoft.com/en-us/library/dd264739.aspx

Solution 2 - C#

C# supports variable length parameter arrays using the params keyword.

Here's an example.

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

There's more info here.

Solution 3 - C#

Yes, params:

public void SomeMethod(params object[] args)

params has to be the last argument and can be of any type. Not sure if it has to be an array or just an IEnumerable.

Solution 4 - C#

I assume you mean a variable number of method parameters. If so:

void DoSomething(params double[] parms)

(Or mixed with fixed parameters)

void DoSomething(string param1, int param2, params double[] otherParams)

Restrictions:

  • They must all be the same type (or of a child type) as is true for arrays as well
  • There can only be one for each method
  • They must come last in the parameter list

That's all I can think of at the moment though there could be others. Check the documentation for more information.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRohit Vipin MathewsView Question on Stackoverflow
Solution 1 - C#hotS85View Answer on Stackoverflow
Solution 2 - C#recursiveView Answer on Stackoverflow
Solution 3 - C#Michael StumView Answer on Stackoverflow
Solution 4 - C#M.BabcockView Answer on Stackoverflow