определение динамических аргументов в C # - PullRequest
8 голосов
/ 15 ноября 2011

можно написать что-то вроде:

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 ]

13 голосов
/ 15 ноября 2011

Вы можете использовать ключевое слово params:

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

Затем вы можете вызвать метод следующим образом:

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

или вот так:

var args = new [] {2, 4, 6};
var output = foo(args)
4 голосов
/ 15 ноября 2011
object[] args = new object[] { 2, 4, 6 };
this.GetType().GetMethod("foo").Invoke(this, args);
2 голосов
/ 15 ноября 2011

Прошло много времени с тех пор, как я создал любой 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( );

Подробнее о создании делегатов с использованием Func и Action .

...