Question

J'ai une variable qui contient la hiérarchie des fonctions comme:

string str= "fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()))" 

// cette hiérarchie est à venir comme une chaîne de base de données

J'ai importé et utilisé System.Reflection Invoke méthode pour l'invoquer, mais il ne travaille si j'ai une seule fonction fun1.

Avec hiérarchie de fonction au-dessus prend l'expression complète comme nom d'une fonction.

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?

Était-ce utile?

La solution

Le problème est la ligne

string str= fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()));

ne pas représentent une expression, ou ce que vous appelez une 'hiérarchie de fonction'. , Il exécute plutôt le côté droit de l'affectation evalue en une valeur de chaîne.

Ce que vous cherchez probablement est la suivante:

Func<string> f = () => fun1(fun2(),fun3(fun4(fun5(34,33,'aa'),'value',fun6()));
…
string result = f();

Ici,'f' est un délégué dans lequel vous attribuez une expression lambda (méthode anonyme) qui peut ensuite être exécutée en invoquant le f délégué.

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