2010-10-12 3 views
0

У меня есть переменная, которая содержит функцию иерархии как:Передача функции в качестве параметра метода Invoke из System.Reflection

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

// эта иерархия наступающем в виде строки из базы данных

У меня есть импортированный System.reflection и используемый метод invoke для его вызова, но он работает только в том случае, если у меня есть только одна функция fun1.

С вышеуказанной функциональной иерархией оно принимает полное выражение как одно имя функции.

Я использую этот код, приведенный ниже, чтобы вызвать мою функцию иерархии:

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; 
} 

Ссылка: http://www.codeproject.com/KB/cs/CallMethodNameInString.aspx

Пожалуйста, скажите мне, что я должен делать?

ответ

1

Проблема заключается в линии

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

не представляют выражение, или то, что вы называете «функции иерархии». Вместо этого он выполняет правую часть задания принимает значение в строковое значение.

То, что вы, вероятно, ищете это:

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

Здесь'f' является делегатом, в который вы назначаете лямбда-выражения (анонимный метод), который впоследствии может быть выполнена путем вызова делегата f.

+0

Фактически я получаю значения (функция hierachy) из таблицы, поэтому он будет в строковой форме, а не как функции. Пожалуйста, предложите –

+0

Итак, код на самом деле содержит строку 'str str =" fun1 (...) ";', правильно? Но это совершенно другая ситуация. Невозможно выполнить такое выражение с помощью отражения. Скорее всего, вам придется скомпилировать его с помощью CodeDom во временную сборку a, выполнить ее. –

+0

Спасибо за поддержку –