C#中的动态参数定义

时间:2011-11-15 03:26:34

标签: c# .net arguments

可能会写出如下内容:

function foo(a,b,c) {
    return a + b + c; 
}

var args = [2,4,6]; 
var output = foo.apply(this, args);  // 12

C#相当于.apply的javascript?

3 个答案:

答案 0 :(得分:13)

您可以使用params关键字:

object foo(params int[] args) { ... }

然后你可以这样调用这个方法:

var output = foo(2, 4, 6);

或者像这样:

var args = new [] {2, 4, 6};
var output = foo(args)

答案 1 :(得分:4)

object[] args = new object[] { 2, 4, 6 };
this.GetType().GetMethod("foo").Invoke(this, args);

答案 2 :(得分:2)

我已经有一段时间了,因为我已经完成了任何javascript,但我知道apply方法是一种创建委托的方法。在C#中,有很多方法可以做到这一点。我会从这样的事情开始:

class Program
{
    static void Main(string[] args)
    {
        Foo foo = new Foo( );
        Func<int[], int> SumArgs = foo.AddArgs; // creates the delegate instance

        //  get some values
        int[] nums = new[] { 4, 5, 6 };

        var result = SumArgs(nums); // invokes the delegate
        Console.WriteLine("result = {0}", result1);

        Console.ReadKey( );
    }
}

internal class Foo
{
    internal int AddArgs(params int[] args)
    {
        int sum = 0;

        foreach (int arg in args)
        {
            sum += arg;
        }

        return sum;
    }
}

使用LINQ还有另一种方式,而不是foreach,您可以使用:

    return args.Sum( );

有关使用FuncAction创建代理的更多信息。