2016-12-01 3 views
0

Я застреваю в точке, где мне нужна строка для выполнения функции или события моего кода. Например, еслипреобразовать строку в функцию: выполнить функцию или событие моего кода

string somestr = "fun"; 

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

public bool fun() 
{ 
    return true; 
} 

Я могу манипулировать somestr нравится «выполнить удовольствие» или «весело()» или что-то.

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

public void ReceivedCommand() 
{ 
    if(somestr == "fun") 
    { 
     bool b = fun(); 
    } 
    else if(somestr == "Otherfun") 
    { 
     //Some Other Function 
    } 
} 

Но теперь дело что у меня есть несколько сотен функций и несколько событий, и пользователь может выбрать любой из них. Я очень уверен, что должно быть что-то, что может решить мою задачу простым способом, вместо того чтобы писать много слов if и switch.

Не могли бы вы указать мне в правильном направлении, как я могу это сделать.

+1

Проверьте это htt p: //stackoverflow.com/questions/6469027/call-methods-using-names-in-c-sharp – Prajwal

ответ

0

Вы можете использовать отражение, чтобы получить метод, который вы хотите, с его именем, используя Type.GetMethod (methodName). см. this

+1

Что-то вроде [This] (http://stackoverflow.com/questions/6469027/call-methods-using- имена-в-о-острый)? –

+0

Спасибо за ваше время. Я посмотрю –

0

Использование отражения. Что-то вроде этого:

Type type = this.GetType(); 
MethodInfo methodInfo = type.GetMethod(somestr); 
methodInfo.Invoke(this, userParameters); 

// And this requires "using System.Reflection;" 

или

Попробуйте this ссылку, я надеюсь, что он работает

+0

Вы уверены? Лемм попробуй. Но похоже, что это не сработает. –

+0

Это работает, проверьте это http://viralpatel.net/blogs/calling-javascript-function-from-string/ –

+0

Это не вопрос Javascript. Посмотрите на теги. – elshev

0

Вы можете сделать это динамически, как этот

class MethodInvoker 
{ 
    delegate void TestDelegate(); 

    public void fun() 
    { 
     Console.WriteLine("fun"); 
    } 

    public void InvokeFromString(string functionName) 
    { 
     TestDelegate tDel =() => { this.GetType().GetMethod(functionName).Invoke(this, null); }; 
     tDel.Invoke(); 
    } 
} 

и использовать его как это

var test = new MethodInvoker(); 
test.InvokeFromString("fun"); 
+0

Lemme попробуйте это. Я уверен, что это сработает. :) –

Смежные вопросы