在ruby中你可以做这样的事情:
def method(a, b) ... end
myMethod(*myArray)
Run Code Online (Sandbox Code Playgroud)
所以如果myArray有两个项目,它将相当于:
myMehtod(myArray[0], myArray[1])
Run Code Online (Sandbox Code Playgroud)
所以在方法体中,a == myArray [0]和b == myArray [1]
你能用C#做这个吗?(所以我可以使用显式参数声明一个方法,而不是仅仅使用数组作为参数)
编辑:我应该更加具体地说明被调用的方法.
Kon*_*lph 12
您的方法可以声明为接受参数数组,通过params
:
void F(params int[] foo) {
// Do something with foo.
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以将任意数量的int
s传递给方法,也可以传递给数组int
.但是给定一个固定的方法声明,你不能像在Ruby中那样动态扩展一个数组,因为参数的处理方式不同(我相信这在Ruby中是不同的),并且因为C#不完全如此动态.
从理论上讲,您可以使用反射来调用方法以实现相同的效果(反射方法调用始终接受参数数组).
如果使用params关键字声明函数的参数,则可以传入数组或任意数量的单个参数.
例如:
public class Foo
{
public static void Main()
{
int[] x = new int[] {1,2,3};
Bar(x);
Bar(10,11,12);
}
public static void Bar(params int[] quux)
{
foreach(int i in quux)
{
System.Console.WriteLine(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
产生
1
2
3
10
11
12
Run Code Online (Sandbox Code Playgroud)