6

我知道不支持匿名函数作为动态方法调用的参数。.NET 4.0 中 DLR 的其他此类限制是什么?

4

1 回答 1

11

可以使用匿名函数,你只需要先转换它们:

dynamic list = new List<string>() { "10", "20" };
dynamic converted = list.ConvertAll((Func<string, int>) (x => int.Parse(x)));

方法组转换也是如此:

foo.Click += (EventHandler) MyClickHandler;

到目前为止我遇到的其他限制:

  • 静态方法和构造函数在类型方面不能是动态的,但在参数方面可以是动态的
  • 您不能dynamic在类型约束中使用
  • 您不能dynamic在类声明的接口中用作类型参数,但可以将其用作基类的类型参数,即

    class Invalid : IEnumerable<dynamic>
    class Valid : List<dynamic>
    
  • 在执行时无法发现扩展方法(但您可以使用动态参数直接调用静态方法)

  • 4.0b1 中有一个错误,您无法从dynamic[]to转换IEnumerable<dynamic>- 这将在发布时修复。
  • 您不能dynamic用作基类

(请注意,这些是 C# 4.0 和 DLR 本身的限制。我的印象是你的意思。)

于 2009-06-20T09:32:54.620 回答