【问题标题】:dynamic arguments definition in C#C# 中的动态参数定义
【发布时间】:2011-12-29 04:30:28
【问题描述】:

可以这样写:

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

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

C#有没有相当于.apply的javascript?

【问题讨论】:

  • 您是否正在寻找一种方法来设置特定函数,以便可以将数组作为参数传递?或者您是否正在寻找一种以数组作为参数调用任意函数的方法?
  • 删除了称呼:“提前谢谢。”,下次不要这样做了:)

标签: c# .net arguments


【解决方案1】:
object[] args = new object[] { 2, 4, 6 };
this.GetType().GetMethod("foo").Invoke(this, 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 创建委托。

    【讨论】:

      【解决方案3】:

      您可以使用 params 关键字:

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

      然后您可以像这样调用该方法:

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

      或者像这样:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 2020-03-23
        • 1970-01-01
        • 2014-07-03
        相关资源
        最近更新 更多