Éditer:Appel de la méthode générique avec un argument de type connu seulement à l'exécution
Bien sûr, mon vrai code ne ressemble pas exactement à ceci. J'ai essayé d'écrire du code semi-pseudo pour le rendre plus clair de ce que je voulais faire.
On dirait que ça a tout chamboulé à la place.
Alors, ce que je voudrais faire en fait est la suivante:
Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...
Eh bien ... Je pensais que peut-être que je pourrais en faire une boucle en utilisant la réflexion. Donc, la question est: Comment comment puis-je le faire. J'ai très connaissance superficielle de la réflexion. Les exemples de code seraient donc géniaux.
Le scénario ressemble à ceci:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var i in interfaces)
{
Method<i>(); // Get compile error here!
}
Original post:
Salut!
Je suis en train de boucler à travers toutes les interfaces dans un espace de noms et de les envoyer comme arguments à une méthode générique comme ceci:
public void Method<T>() where T : class
{}
public void AnotherMethod()
{
Assembly assembly = Assembly.GetExecutingAssembly();
var interfaces = from i in assembly.GetTypes()
where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
select i;
foreach(var interface in interfaces)
{
Method<interface>(); // Get compile error here!
}
}
L'erreur que je reçois est « Nom du type prévu, mais nom de la variable locale trouvé ". Si je tente
...
foreach(var interface in interfaces)
{
Method<interface.MakeGenericType()>(); // Still get compile error here!
}
}
Je reçois « Impossible d'appliquer l'opérateur « < » opérandes de type « groupe méthode » et« System.Type » Toute idée sur la façon de contourner ce problème?
Je voudrais bouchonner la méthode générique, en fonction du type. Mais si je le fais en utilisant la réflexion, puis que je talonne celui qui est généré, il comprendra qu'il ne bougera pas ce que je veux. Je suppose que c'est impossible? Ou est-ce? Stub la méthode générique pour tous les types dans une liste ... –
@Stephane: Il est difficile de savoir exactement ce que vous essayez de faire. Je vous suggère de poser une nouvelle question avec plus de détails. –
Notez que vous pouvez obtenir « correspondant Ambigu dans la résolution de la méthode » sur 'GetMethod()'. Cela se produit lorsque la méthode que vous essayez d'obtenir présente des surcharges. Vous devez donc spécifier celui que vous voulez en utilisant 'GetMethod (" Name ", new Type [] {arguments})' – cvsguimaraes