params(C# 参考)params (C# Reference)

使用 params 关键字可以指定采用数目可变的参数的方法参数By using the params keyword, you can specify a method parameter that takes a variable number of arguments.

可以发送参数声明中所指定类型的逗号分隔的参数列表或指定类型的参数数组。You can send a comma-separated list of arguments of the type specified in the parameter declaration or an array of arguments of the specified type. 还可以不发送参数。You also can send no arguments. 如果未发送任何参数,则 params 列表的长度为零。If you send no arguments, the length of the params list is zero.

在方法声明中的 params 关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个 params 关键字。No additional parameters are permitted after the params keyword in a method declaration, and only one params keyword is permitted in a method declaration.

声明的 params 参数类型必须是一维数组,如以下示例所示。The declared type of the params parameter must be a single-dimensional array, as the following example shows. 否则,发生编译器错误 CS0225Otherwise, a compiler error CS0225 occurs.

示例Example

下面的示例演示可向 params 形参发送实参的各种方法。The following example demonstrates various ways in which arguments can be sent to a params parameter.

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

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

    static void Main()
    {
        // You can send a comma-separated list of arguments of the 
        // specified type.
        UseParams(1, 2, 3, 4);
        UseParams2(1, 'a', "test");

        // A params parameter accepts zero or more arguments.
        // The following calling statement displays only a blank line.
        UseParams2();

        // An array argument can be passed, as long as the array
        // type matches the parameter type of the method being called.
        int[] myIntArray = { 5, 6, 7, 8, 9 };
        UseParams(myIntArray);

        object[] myObjArray = { 2, 'b', "test", "again" };
        UseParams2(myObjArray);

        // The following call causes a compiler error because the object
        // array cannot be converted into an integer array.
        //UseParams(myObjArray);

        // The following call does not cause an error, but the entire 
        // integer array becomes the first element of the params array.
        UseParams2(myIntArray);
    }
}
/*
Output:
    1 2 3 4
    1 a test
           
    5 6 7 8 9
    2 b test again
    System.Int32[]
*/

C# 语言规范C# language specification

有关详细信息,请参阅 C# 语言规范For more information, see the C# Language Specification. 该语言规范是 C# 语法和用法的权威资料。The language specification is the definitive source for C# syntax and usage.

请参阅See also