你可以将'扩展'数组传递给C#中的函数,就像在ruby中一样吗?

Dan*_*tep 7 c# methods

在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)

现在,您可以将任意数量的ints传递给方法,也可以传递给数组int.但是给定一个固定的方法声明,你不能像在Ruby中那样动态扩展一个数组,因为参数的处理方式不同(我相信这在Ruby中是不同的),并且因为C#不完全如此动态.

从理论上讲,您可以使用反射来调用方法以实现相同的效果(反射方法调用始终接受参数数组).


Mar*_*off 9

如果使用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)