¿La palabra clave dinámica en C # 4 permite ciertas operaciones previamente imposibles con genéricos?

StackOverflow https://stackoverflow.com/questions/1630729

  •  06-07-2019
  •  | 
  •  

Pregunta

La palabra clave dynamic en C # 4 presenta nuevas formas de trabajar con objetos que antes no eran posibles. ¿Cómo se superpone esto con los genéricos? Específicamente, ¿hay operaciones que serían potencialmente útiles que ahora son legales y válidas?

Por ejemplo, esto no es posible ahora:

// Use a type whose value is known only at runtime.
Type t = ...;
List<t> l = new List<t>();
// ... (add some items to the list)
t first = l[0];

¿Hay alguna manera de lograr algo similar una vez que dynamic esté disponible?

¿Fue útil?

Solución

dinámica no te ayuda mucho aquí. Aún necesita usar Type.GetGenericTypeDefinition () / MakeGenericType () para crear el objeto inicialmente, lo cual es menos que agradable.

Si lo entiendo correctamente, lo que hará la dinámica es que una vez que haya construido el tipo de esa manera, será más fácil trabajar con él. Por ejemplo, usted sabe que tiene una lista de algún tipo, incluso si el compilador no la tiene. Entonces, si ha asignado esa lista a una variable dinámica, puede hacer cosas como llamarla método .Add () y la llamada debería resolverse en tiempo de ejecución.

Tenga en cuenta que aún no he jugado con esto personalmente, así que hasta que lo pruebe usted mismo, esto sigue siendo un rumor.

Otros consejos

Puede hacerlo ahora, aunque realmente tiene que quererlo. Observar:

Type t = ...;
typeof(List<>)
    .MakeGenericType(t)
    .GetMethod(...);

Genéricos y reflexión: no realmente mejor juntos, pero si lo necesitas ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top