我知道在动态方法调用中,不支持匿名函数作为参数。除此之外,在.NET 4.0中,DLR还有哪些限制?
我知道在动态方法调用中,不支持匿名函数作为参数。除此之外,在.NET 4.0中,DLR还有哪些限制?
你 可以 使用匿名函数,你只需要先将它们转换成所需类型:
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>
在运行时无法发现扩展方法(但您可以使用动态参数直接调用静态方法)
dynamic[]
转换为IEnumerable<dynamic>
- 这将在发布版中得到修复。dynamic
用作基类(请注意,这些是C# 4.0和DLR本身的限制。尽管如此,我了解到这就是您的意思。)