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

Pra*_*K M 85 c#

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

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

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

void f1(String... a)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 131

是的,C#具有相当于varargs的参数.它们被称为参数数组,并随params修饰符一起引入:

public void Foo(int x, params string[] values)
Run Code Online (Sandbox Code Playgroud)

然后用:

Foo(10, "hello", "there");
Run Code Online (Sandbox Code Playgroud)

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

  • @HighCore:如果你要提到它几乎任何其他语言功能,它可能不值得一提:) (14认同)
  • @hvd:鉴于OP似乎是一个初学者,我宁愿不进入命名参数,可选参数等.我看到你想要做的一点,但我认为这会增加混乱而不是光. (2认同)

Adr*_*der 36

看看params(C#参考)

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

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

在方法声明中的params关键字之后不允许使用其他参数,并且在方法声明中只允许使用一个params关键字.

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

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

并用作

UseParams(1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)