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

为什么要用它?如果你编写的函数或方法正在使用它,当你删除它时,代码仍然可以完美地工作,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不允许多维数组。 而你可以将多维数组传递给函数。

其他回答

另一个例子

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

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

不需要创建重载方法,只需使用一个带有参数的方法,如下所示

// Call params method with one to four integer constant parameters.
//
int sum0 = addTwoEach();
int sum1 = addTwoEach(1);
int sum2 = addTwoEach(1, 2);
int sum3 = addTwoEach(3, 3, 3);
int sum4 = addTwoEach(2, 2, 2, 2);

使用参数你可以像这样调用你的方法:

addTwoEach(1, 2, 3, 4, 5);

如果没有参数,就不能。

此外,在这两种情况下,你都可以用数组作为参数调用方法:

addTwoEach(new int[] { 1, 2, 3, 4, 5 });

也就是说,params允许您在调用方法时使用快捷方式。

与此无关,你可以大大缩短你的方法:

public static int addTwoEach(params int[] args)
{
    return args.Sum() + 2 * args.Length;
}

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

addTwoEach(10, 2, 4, 6)

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

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

还有一件重要的事情需要强调。最好使用参数,因为它的性能更好。当你调用一个带有params参数的方法时,什么都没有传递给它:

public void ExampleMethod(params string[] args)
{
// do some stuff
}

电话:

ExampleMethod();

然后。net Framework的新版本(从。net Framework 4.6开始):

ExampleMethod(Array.Empty<string>());

这个数组。空对象以后可以被框架重用,所以不需要做多余的分配。这些分配将在你像这样调用这个方法时发生:

 ExampleMethod(new string[] {});