Вы можете использовать анонимные функции, вам просто нужно сначала привести их:
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
в качестве базового класса
(Обратите внимание, что это ограничения C # 4.0 в той же степени, что и самого DLR. У меня сложилось впечатление, что именно это вы и имели в виду.)