2011-11-15 56 views
8

有可能寫這樣的:動態參數定義

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

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

C#有一個相當於爲JavaScript的.apply

+0

您是否正在尋找一種設置特定函數的方式,以便您可以將數組作爲參數傳遞?或者你正在尋找一種以數組爲參數調用任意函數的方法? –

+0

刪除了稱呼:「提前致謝」,下次不要這樣做:) –

回答

13

可以使用params關鍵字:

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

然後,您可以調用的方法是這樣的:

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

或像這樣:

var args = new [] {2, 4, 6}; 
var output = foo(args) 
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

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