2009-06-20 21 views

Respuesta

11

Usted puede uso de funciones anónimas, sólo hay que echarlos en primer lugar:

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

Lo mismo puede decirse de las conversiones de grupo Método:

foo.Click += (EventHandler) MyClickHandler; 

Otras restricciones por lo que he encontrado ahora:

  • Los métodos y constructores estáticos no pueden ser dynami c en función del tipo, pero puede ser dinámico en términos de los argumentos
  • No puede utilizar dynamic en una restricción de tipo
  • No puede utilizar dynamic como un argumento de tipo en una interfaz para una declaración de la clase, pero se puede utilizarlo como un argumento de tipo para una clase base, es decir

    class Invalid : IEnumerable<dynamic> 
    class Valid : List<dynamic> 
    
  • los métodos de extensión no son detectables en tiempo de ejecución (pero se puede llamar al método estático directamente con argumentos dinámicos)

  • Hay un error en 4.0b1 de modo que no se puede convertir de dynamic[] a IEnumerable<dynamic> - eso se solucionará en el lanzamiento.
  • No puede utilizar dynamic como clase base

(Tenga en cuenta que estos son limitaciones de C# 4.0 tanto como del propio DLR. Me dio la impresión de que era lo que quería decir sin embargo.)

+0

Genial, es bueno obtener una respuesta tuya :) – amazedsaint

+1

¿No es necesario que todos los delegados utilicen el elenco, no solo anons/lambdas? p.ej. en btn.Click + = MyClickHandler; si btn es dinámico pero tiene un evento Click, eso no funcionará. Necesita el molde alrededor del nombre del método MyClickHandler. –

+0

@Earwicker: No * todos * los usos de los delegados, pero tiene razón en que las conversiones de grupo de métodos también requieren un reparto. Actualizaré mi respuesta en consecuencia. –

Cuestiones relacionadas