Le mot clé dynamique en C # 4 autorise-t-il certaines opérations auparavant impossibles avec des génériques?

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

  •  06-07-2019
  •  | 
  •  

Question

Le mot clé dynamic en C # 4 introduit de nouvelles façons de travailler avec des objets qui n'étaient pas possibles auparavant. Comment cela se chevauche-t-il avec les génériques? Plus précisément, existe-t-il des opérations potentiellement utiles qui sont maintenant légales et valides?

Par exemple, cela n’est plus possible maintenant:

// 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];

Y a-t-il moyen d'accomplir quelque chose de similaire une fois que dynamique est disponible?

Était-ce utile?

La solution

dynamique ne vous aide pas beaucoup ici. Vous devez toujours utiliser Type.GetGenericTypeDefinition () / MakeGenericType () pour créer l'objet initialement, ce qui est moins qu'agréable.

Si je comprends bien, ce qui sera dynamique une fois que vous aurez construit le type de cette manière, cela facilitera le travail. Par exemple, vous savez que vous avez une liste de types, même si le compilateur ne le sait pas. Par conséquent, si vous avez affecté cette liste à une variable dynamique, vous pouvez procéder comme suit: appelez la méthode .Add () et l'appel devrait être résolu au moment de l'exécution.

Notez que je n'ai pas encore joué avec cela personnellement, donc jusqu'à ce que vous essayiez vous-même, ceci n'est qu'un ouï-dire.

Autres conseils

Vous pouvez le faire maintenant, même si vous devez le vouloir vraiment. Observez:

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

Génériques et réflexion: pas vraiment mieux ensemble, mais si vous en avez besoin ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top