2011-11-15 9 views
8

to możliwe napisać coś takiego:dynamiczny argumenty definicja w języku C#

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

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

C# istnieje odpowiednik .apply javascript?

+0

Szukasz sposobu na skonfigurowanie określonej funkcji, aby można było przekazać tablicę jako parametr? A może szukasz sposobu na wywołanie dowolnych funkcji z tablicą jako parametrem? –

+0

usunięto pozdrowienie: "Z góry dziękuję.", Nie rób tego następnym razem :) –

Odpowiedz

13

Można użyć słowa kluczowego params:

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

Następnie można wywołać metodę tak:

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

lub tak:

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

Minęło trochę czasu od Zrobiłem dowolny javascript, ale rozumiem, że metoda apply jest sposobem tworzenia delegata. W języku C# istnieje wiele sposobów, aby to zrobić. Chciałbym zacząć od czegoś takiego:

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; 
    } 
} 

Jest też inny sposób przy użyciu LINQ, zamiast foreach, można użyć:

return args.Sum(); 

Więcej na tworzenie delegatów użyciu Func i Action.

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