2015-12-25 8 views
-4

Так что я знаю, как это сделать:Передача метод в качестве параметра с параметрами

void PrintFoo() { Console.Write("Foo");} 
void DoSomething (Action methodToCall) { methodToCall();} 
void Main() { DoSomething(PrintFoo); } 

Что я хочу сделать:

void PrintFoo (string fooToPrint) { Console.Write(fooToPrint);} 
void DoSomething (Action methodToCall) { methodToCall();} 
void Main() { DoSomething(PrintFoo("Foo bar baz")); } 

В основном называют действия с параметрами

ответ

4

Используйте лямбда-выражение:

void PrintSomething(string stringToPrint) { Console.Write(stringToPrint); } 
void DoSomething(Action methodToCall) { methodToCall(); } 

void Main() 
{ 
    DoSomething(() => PrintSomething("Message")); 
} 
+2

Благодарим вас за дезинфекцию кода. :) – sstan

0

Вы также можете определить действия, требующие типов параметров для обратного вызова.

public void DoSomething(Action<string> Callback){ 
    var result = getMyString(); 
    Callback(result); 
} 

public void DoSomething(Action<string> CallBack, List<string> Parms){ 
    var sb = new StringBuilder();   
    Parms.ForEach(p=> sb.Append(Parse(p)); 
    Callback(sb.ToString()); 
} 
Смежные вопросы