動的メソッド呼び出しの引数として無名関数がサポートされていないことは知っています。.NET 4.0でのDLRの他のそのような制限は何ですか?
1 に答える
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
基本クラスとして使用することはできません
(これらはDLR自体と同様にC#4.0の制限であることに注意してください。私はあなたが意図したものであるという印象を受けました。)
于 2009-06-20T09:32:54.620 に答える