6

動的メソッド呼び出しの引数として無名関数がサポートされていないことは知っています。.NET 4.0でのDLRの他のそのような制限は何ですか?

4

1 に答える 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 に答える