我知道这是一个很基本的问题,但我找不到答案。

为什么要用它?如果你编写的函数或方法正在使用它,当你删除它时,代码仍然可以完美地工作,100%没有它。例句:

参数:

static public int addTwoEach(params int[] args)
{
    int sum = 0;
    foreach (var item in args)
        sum += item + 2;
    return sum;
}

无参数:

static public int addTwoEach(int[] args)
{
    int sum = 0;
    foreach (var item in args)
       sum += item + 2;
    return sum;
}

当前回答

Params还允许使用单个参数调用方法。

private static int Foo(params int[] args) {
    int retVal = 0;
    Array.ForEach(args, (i) => retVal += i);
    return retVal;
}

例如Foo (1);而不是Foo(new int[] {1});在需要传递单个值而不是整个数组的场景中,可以用于简化。它仍然在方法中以相同的方式处理,但为这种方式调用提供了一些糖果。

其他回答

可能听起来很蠢, 但是Params不允许多维数组。 而你可以将多维数组传递给函数。

Params还允许使用单个参数调用方法。

private static int Foo(params int[] args) {
    int retVal = 0;
    Array.ForEach(args, (i) => retVal += i);
    return retVal;
}

例如Foo (1);而不是Foo(new int[] {1});在需要传递单个值而不是整个数组的场景中,可以用于简化。它仍然在方法中以相同的方式处理,但为这种方式调用提供了一些糖果。

它允许您在调用中添加任意数量的基类型参数。

addTwoEach(10, 2, 4, 6)

而对于第二种形式,你必须使用数组作为参数

addTwoEach(new int[] {10,2,4,6})

另一个例子

public IEnumerable<string> Tokenize(params string[] words)
{
  ...
}

var items = Tokenize(product.Name, product.FullName, product.Xyz)

使用参数可以不带参数地调用函数。无参数:

static public int addTwoEach(int[] args)
{
    int sum = 0;

    foreach (var item in args)
    {
        sum += item + 2;
    }

    return sum;
}

addtwoEach(); // throws an error

与参数比较:

static public int addTwoEach(params int[] args)
{
    int sum = 0;

    foreach (var item in args)
    {
        sum += item + 2;
    }

    return sum;
}

addtwoEach(); // returns 0

通常,当参数的数量从0到无穷大时,可以使用参数;当参数的数量从1到无穷大时,可以使用数组。