Edit:
Bien sûr que mon code n'est pas exactement comme cela. J'ai essayé d'écrire semi-pseudo-code pour le rendre plus clair de pourquoi je voulais faire.
Ressemble juste gâché les choses à la place.
Donc, ce que je voudrais faire est ceci:
Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...
Bien ... je pensais que peut-être je pourrais le transformer en une boucle à l'aide de la réflexion. La question est donc: Comment puis-je le faire. J'ai très peu profonde connaissance de la réflexion. Donc, des exemples de code serait génial.
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 faire une boucle par toutes les interfaces dans un espace de noms et de les envoyer, comme les arguments d'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 j'obtiens est "nom du Type prévu, mais nom de variable locale". Si j'essaie
...
foreach(var interface in interfaces)
{
Method<interface.MakeGenericType()>(); // Still get compile error here!
}
}
J'ai "Impossible d'appliquer l'opérateur '<' pour des opérandes de type "méthode" groupe " et " le Système de.Le "Type" Aucune idée sur comment contourner ce problème?