我有一个像下面这样的类(class):

class Foo
{
  public Foo(int x) { ... }
}

我需要将这样的委托(delegate)传递给某个方法:
delegate Foo FooGenerator(int x);

是否可以将构造函数作为FooGenerator值直接传递,而无需键入:
delegate(int x) { return new Foo(x); }



编辑:对于我个人使用,该问题涉及.NET 2.0,但也欢迎使用3.0+的提示/响应。

最佳答案

不,CLR不允许将委托(delegate)绑定(bind)到ConstructorInfo

但是,您可以只创建自己的:

static T Make<T>(Action<T> init) where T : new()
{
  var t = new T();
  init(t);
  return t;
}

用法
var t = Make<Foo>( x => { x.Bar = "bar"; x.Baz = 1; });

10-08 07:27
查看更多