2009-09-22 5 views
4

Например, основной метод, который я хочу, чтобы назвать это:Можно ли объявить метод как параметр в C#?

public static void MasterMethod(string Input){ 
    /*Do some big operation*/ 
} 

Обычно я хотел бы сделать что-то подобное это:

public static void StringSelection(int a) 
{ 
    if(a == 1) 
    { 
     return "if"; 
    } 
    else 
    { 
     return "else"; 
    } 
} 

MasterMethod(StringSelection(2)); 

Но я хочу сделать что-то вроде этого:

MasterMethod(a = 2 
    { 
     if(a == 1) 
     { 
      return "if"; 
     } 
     else 
     { 
      return "else"; 
     } 
    }); 

Где 2 каким-то образом передается в операцию как вход.

Возможно ли это? У этого есть имя?

EDIT :: Обратите внимание, что MasterMethod является вызовом API. Я не могу изменить параметры для него. Я случайно сделал опечатку на этом.

+2

Примечание: У вас есть метод недействительным, возвращающую строку - которая не будет компилировать. Мой ответ переключается. –

+0

Typo. Починил это. – danmine

ответ

2
+0

И, в общем, делегаты. –

+0

@Steven я бы отредактировал, но думаю, что ответ довольно хорошо освещен в другом месте. – dove

20

Вы можете сделать это с помощью delegates in C#:

public static string MasterMethod(int param, Func<int,string> function) 
{ 
    return function(param); 
} 


// Call via: 
string result = MasterMethod(2, a => 
{ 
    if(a == 1) 
    { 
     return "if"; 
    } 
    else 
    { 
     return "else"; 
    } 
}); 
+0

Конечно, это имеет смысл только в том случае, если 2 находится в переменной, а не буквальной. :-) –

+0

Да, конечно, просто совпадающий код с вопросом [Was: MasterMethod (StringSelection (2));] –

3

Вы можете сделать это с делегатами Анон:

delegate string CreateString(); 

    public static void MasterMethod(CreateString fn) 
    { 
     string something = fn(); 
     /*Do some big operation*/ 
    } 

    public static void StringSelection(int a) 
    { 
     if(a == 1) 
     { 
      return "if"; 
     } 
     else 
     { 
      return "else"; 
     } 
    } 

    MasterMethod(delegate() { return StringSelection(2); }); 
Смежные вопросы