Ok, peut-être que ce titre n'a pas beaucoup de sens, mais voici l'affaire. Dire que j'ai une méthode générique avec de multiples contraintes de type, ce ceci:C#: Comment trouver et créer des instances qui remplit plusieurs contraintes de type
public static void DoSomethingAwesome<T>(T thing)
where T : IThing, IAwesome, IComparable<T>
{
...
}
maintenant .... comment puis-je, en utilisant la réflexion, créer quelque chose que je peux envoyer là-dedans?
Si c'était une seule contrainte, je sais que je peux le faire comme ceci:
var types = assembly
.GetTypes()
.Where(typeof (IThing).IsAssignableFrom)
foreach(var t in types)
DoSomethingAwesome((IThing) Activator.CreateInstance(t));
Mais, ne peut pas vraiment jeter à plusieurs interfaces ... comment diable puis-je résoudre ce problème? Vous pourriez dire que je suis à peu près perdu ici maintenant: P
Titre obtenu sorte de long et complexe que je ne savais pas comment appeler cela, s'il vous plaît améliorer si vous pouvez
type que j'ai reçu de Reed? – Svish
Désolé, je ne voulais pas reproduire les réponses de Reed et Loren sur la façon de localiser les types appropriés. Je suppose que, en utilisant les autres réponses, vous pouvez trouver un type approprié et instancier une instance (en utilisant Activator.CreateInstance). Vous passez ensuite ce type à MakeGenericMethod, et l'instance à Invoke. Désolé pour le manque de clarté. – itowlson
Aah, pense que je l'ai eu maintenant. Mais wat est m? devrait-il être mgénérique? – Svish