J'ai une variable qui contient la hiérarchie des fonctions comme:Passant fonction en tant que paramètre dans la méthode Invoke de System.Reflection
string str= "fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()))"
// cette hiérarchie vient comme une chaîne de base de données
Je importé System.reflection et utilisé la méthode invoke pour l'appeler, mais cela ne fonctionne que si je n'ai qu'une seule fonction fun1
.
Avec la hiérarchie de fonction ci-dessus, l'expression complète prend la forme d'un nom de fonction unique.
J'utilise ce code pour appeler ci-dessous ma hiérarchie de fonction:
public static string InvokeStringMethod(string typeName, string methodName)
{
// Get the Type for the class
Type calledType = Type.GetType(typeName);
// Invoke the method itself. The string returned by the method winds up in s
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
// Return the string that was returned by the called method.
return s;
}
Référence: http://www.codeproject.com/KB/cs/CallMethodNameInString.aspx
S'il vous plaît me dire ce que dois-je faire?
effectivement je reçois des valeurs (fonction hierachy) de la table de sorte qu'il sera sous forme de chaîne, pas comme les fonctions. S'il vous plaît suggérer –
Donc le code indique réellement 'chaîne str =" fun1 (...) ";', droite? Mais c'est une situation ** très différente **. Il n'y a aucun moyen d'exécuter une telle expression en utilisant la réflexion. Vous devrez, très probablement, le compiler en utilisant CodeDom dans un assemblage temporaire et l'exécuter. –
Merci de votre soutien –