2011-11-15 14 views
8

es posible escribir algo como:argumentos definición dinámica en C#

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

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

C# hay un equivalente a .apply de JavaScript?

+0

¿Está buscando una manera de configurar una función particular para que pueda pasar una matriz como parámetro? ¿O está buscando una forma de llamar a funciones arbitrarias con una matriz como parámetro? –

+0

saludo eliminado: "Gracias de antemano", no lo hagas la próxima vez :) –

Respuesta

13

Puede utilizar el params palabra clave:

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

A continuación, puede llamar al método como este:

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

o como esto:

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

Ha sido un tiempo desde He hecho cualquier javascript, pero entiendo que el método apply es una forma de crear un delegado. En C# hay varias maneras de hacer esto. Me gustaría empezar con algo como esto:

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

Hay otra manera usando LINQ, en lugar de la foreach, puede utilizar:

return args.Sum(); 

más en crear delegados utilizando Func y Action.

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