Using an Indeterminate Number of Parameters (C# vs Java)

C# allows you to send a variable number of parameters to a method by specifying the params keyword when the method is declared. The argument list can contain regular parameters also, but note that the parameter declared with the params keyword must come last. It takes the form of a variable length array, and there can be only one params parameter per method.

When the compiler tries to resolve a method call, it looks for a method whose argument list matches the method called. If no method overload that matches the argument list can be found, but there is a matching version with a params parameter of the appropriate type, then that method will be called, placing the extra arguments in an array.

The following example demonstrates this idea:

class TestParams
{
    private static void Average(string title, params int[] values)
    {
        int sum = 0;
        System.Console.Write("Average of {0} (", title);

        for (int i = 0; i < values.Length; i+)
        {
            sum += values[i];
            System.Console.Write(values[i] + ", ");
        }
        System.Console.WriteLine("): {0}", (float)sum/values.Length);
    }
    static void Main()
    {
        Average ("List One", 5, 10, 15);
        Average ("List Two", 5, 10, 15, 20, 25, 30);
    }
}

In the previous example, the method Average is declared with a params parameter of type integer array, letting you call it with any number of arguments. The output is shown here:

Average of List One (5, 10, 15, ): 10

Average of List Two (5, 10, 15, 20, 25, 30, ): 17.5

You can specify a params parameter of type Object if you want to allow indeterminate parameters of different types.

See Also

Concepts

C# Programming Guide

Passing Arrays as Arguments (C# Programming Guide)

Other Resources

The C# Programming Language for Java Developers