是否有Java的vararg参数的C#替代品?

时间:2013-08-12 19:12:17

标签: c#

我从事过Java和新的.Net技术

是否可以在C#中声明一个接受变量输入参数的函数

是否有类似于以下Java语法的C#语法?

void f1(String... a)

2 个答案:

答案 0 :(得分:120)

是的,C#具有相当于varargs的参数。它们被称为parameter arrays,并使用params修饰符引入:

public void Foo(int x, params string[] values)

然后用:

调用它
Foo(10, "hello", "there");

就像Java一样,它只是最后一个可以像这样变化的参数。请注意(与Java一样)params object[] objects的参数很容易引起混淆,因为您需要记住类型object[]的单个参数是否要再次包装。同样,对于任何可空类型,您需要记住null的单个参数是被视为数组引用还是单个数组元素。 (我认为编译器只在必要时创建数组,但我倾向于编写代码,避免让我记住它。)

答案 1 :(得分:32)

查看params (C# Reference)

  

params关键字允许您指定采用a的方法参数   可变数量的参数。

     

您可以发送以逗号分隔的指定类型的参数列表   在参数声明中,或者参数的数组   指定的类型。你也可以不发送任何参数。

     

a中的params关键字后不允许使用其他参数   方法声明,a中只允许一个params关键字   方法声明。

如示例所示,该方法声明为

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

并用作

UseParams(1, 2, 3, 4);