.NET 4.0中动态语言运行时的限制是什么?

时间:2009-06-20 09:23:27

标签: c# .net dynamic-language-runtime

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

1 个答案:

答案 0 :(得分: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[]转换为IEnumerable<dynamic> - 这将在发布时修复。
  • 您不能将dynamic用作基类

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