2009-06-20 68 views

回答

11

可以使用匿名函数,你就必须先丢掉。

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

同样是方法组转换的真实:我遇到这样

foo.Click += (EventHandler) MyClickHandler; 

其他限制远:

  • 静态方法和构造函数不能是动态的c。在类型方面,但可以在参数方面是动态的
  • 不能使用dynamic在类型约束
  • 不能在界面中使用dynamic的类型参数的类的声明,但你可以使用它作为一个基类类型参数,即

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

  • 4.0b1中存在一个错误,因此您无法将其从dynamic[]转换为IEnumerable<dynamic> - 这将在发布时进行修复。
  • 不能使用dynamic作为基类

(请注意,这些是C#4.0不亚于DLR本身。我得到的印象是,这是你虽然意味着什么限制。)

+0

太棒了,很高兴能从你那里得到答案:) – amazedsaint 2009-06-20 11:11:03