这两种方法之间的确切区别是什么?何时使用“params”以及何时使用数组参数?非常感谢回复。
// passing array to a method
class Program
{
static void printarray(int[] newarray)
{
int i,sum=0;
Console.Write("\n\nYou entered:\t");
for (i = 0; i < 4; i++)
{
Console.Write("{0}\t", newarray[i]);
sum = sum + newarray[i];
}
Console.Write("\n\nAnd sum of all value is:\t{0}", sum);
Console.ReadLine();
}
static void Main(string[] args)
{
int[] arr = new int[4];
int i;
for (i = 0; i < 4; i++)
{
Console.Write("Enter number:\t");
arr[i] = Convert.ToInt32(Console.ReadLine());
}
// passing array as argument
Program.printarray(arr);
}
}
}
//using parameter arrays
public class MyClass
{
public static void UseParams(params int[] list)
{
for (int i = 0; i < list.Length; i++)
{
Console.Write(list[i] + " ");
}
Console.WriteLine();
}
static void Main()
{
UseParams(1, 2, 3, 4);
int[] myIntArray = { 5, 6, 7, 8, 9 };
UseParams(myIntArray);
}
}
答案 0 :(得分:6)
使用params
你可以传递零或更多的参数,但是对于数组,如果它不是可选,你必须推测该参数。例如,你可以在不传递任何参数的情况下调用此方法,args将为空:
public void Foo(params int[] args) { }
Foo(); // no compile-time error, args will be empty
但是如果你使用数组:
public void Foo(int[] args) { }
Foo(); // error: No overload for 'Foo' takes 0 arguments
否则两者之间没有太大区别。 params
只是一种语法糖。
答案 1 :(得分:0)
除了Selman的答案,使用params
时还有一些明显但次要的限制:
在方法声明中的params关键字之后不允许使用其他参数,在方法声明中仅允许一个params关键字。
这是因为编译器将很难确定哪个参数属于哪个参数。
如果您在params
params
参数必须是正式参数列表中的最后一个。
例如,不允许这样做:
public void Foo(params int[] args,int value) { }
答案 2 :(得分:0)
添加到前两个答案。如果我们有一个方法
calculate(params int[] b)
然后可以用calculate(1,2,3)
现在,如果您使用整数数组 calculate(int[] b)
。您将无法像这样调用函数 calculate(1,2,3)
。