是否有可能在C#中构建如下的匿名/委托?

时间:2016-07-13 07:19:16

标签: c# .net delegates anonymous-function

无论如何要完成以下操作?这是我想要做的一些简化的半伪代码:

class Foo {

  static public FUNCTION one(int foo, int bar) {    
    return List<Vector> FUNCTION(int num)  {      
      List<Vector> v = new List<Vector>();
      for (int i = 0; i < num; i++) {
        v.Add( new Vector(1+foo, 1+bar) );      
      }
      return v;
    }

  static public FUNCTION two(int foo, int bar) {    
    return List<Vector> FUNCTION(int num)  {      
      List<Vector> v = new List<Vector>();
      // Do something else?
      return v;
    }

  }    
}

然后我想这样称呼它:

 generic = Foo.one(1, 2);
 List<Vector> v = generic(2);

 generic = Foo.two(1, 2);
 List<Vector> v = generic(2);

我认为这与我想要的一致,但我不确定如何传递第一组参数。

public static Func<int, int, List<Vector>> one()
{
    Func<int, List<Vector>> func = (int num) =>
    {
      List<Vector> v = new List<Vector>();
      return v;
    };
    return func;
}

1 个答案:

答案 0 :(得分:1)

这是解决问题的方法吗?它是一个名为Closure的结构。它只是你已经拥有的东西的组合。

public static Func<int, List<Vector>> one(int foo, int bar)
{
    Func<int, List<Vector>> func =
        num =>
        {
            List<Vector> v = new List<Vector>();
            for (int i = 0; i < num; i++)
            {
                v.Add(new Vector(1 + foo, 1 + bar));
            }
            return v;
        };

    return func;
}