2009-06-20 41 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