2009-06-20 3 views

答えて

11

、あなただけの最初にそれらをキャストする必要があります。

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

同じメソッドグループの変換の真である:私は遭遇した

foo.Click += (EventHandler) MyClickHandler; 

その他の制限far:

  • 静的メソッドとコンストラクタはダイナミックにすることはできませんあなたは
  • あなたがのためのインターフェイスで型引数としてdynamicを使用することはできません型の制約でdynamicを使用することはできません

  • タイプの面でcが、しかし引数の観点で動的にすることができクラス宣言しますが、基底クラスの型引数として使用することができ、すなわち

    class Invalid : IEnumerable<dynamic> 
    class Valid : List<dynamic> 
    
  • 拡張メソッドは、実行時に発見されない(しかし、あなたは、動的な引数を直接静的メソッドを呼び出すことができます)

  • dynamic[]からIEnumerable<dynamic>に変換できないような4.0b1のバグがあります。これはリリースで修正される予定です。
  • あなたは(これらはDLR自身の限りC#4.0の制限があることに注意してください。私はあなたがが何を意味するのかした印象を受けました。)基本クラスとして

dynamicを使用することはできません

+0

偉大な、あなたから答えを得るのは良いです:) – amazedsaint

+1

代議員のすべての用途は、単にanons/lambdaではなく、キャストを必要としませんか?例えばbtn.Click + = MyClickHandler; btnが動的だがClickイベントを持っていれば、それは動作しません。 MyClickHandlerメソッド名の周りにキャストが必要です。 –

+0

@Earwicker:デリゲートのすべての*使用ではありませんが、メソッドグループの変換にはキャストも必要です。それに応じて私の答えが更新されます。 –

関連する問題