2013-01-22 2 views
3

많은 함수가 있지만 다른 함수 내에서 실행해야합니다.코드를 매개 변수로 사용하는 함수

wrapper(Method1()); 

문제는에, 그쪽은 가끔 방법 항목 및 방법 2를 실행할 필요가 있습니다 :

는 나는이

public void Method1() 
{ 
bla bla 
} 


public void Method2() 
{ 
bla bla 
} 

public void Wrapper(Action<string> myMethod) 
     { 
     method{ 
      myMethod() 
       } 
      bla bla 
     } 

같은 것을 할 그리고 이런 식으로 뭔가를 사용하여 호출 할 수 있습니다 알고 동시. 그들은 많이 있습니다. 때때로 한 개, 때때로 동시에 여러 개.

Wrapper({bla bla bla; method(); bla bla; } 
{ 
method{ 
bla bla bla; 
method(); 
bla bla; 

     } 
} 

이 방법 안에 코드 블록을 실행하고 메서드의 매개 변수는 코드 블록 :

그래서 나는 이런 식으로 뭔가를 좋은 것 생각하고있다. 가능하다고 생각하십니까? 아니면 다른 접근 방법을 권하고 싶습니까? 당신이 명시 적으로 원하는 서명 (여기 Action<string> 일치)와 방법을 정의 할 필요가 없습니다 것입니다

static void Main(string[] args) 
{ 
    Wrapper((s) => 
    { 
     //actually whatever here 
     int a; 
     bool b; 
     //.. 
     Method1(); 
     Method2(); 
     //and so on 
    }); 
} 

을하지만 :

+2

http://msdn.microsoft.com/en-us/library/ms173171.aspx 및 http://msdn.microsoft.com/en-us/library/bb882516.aspx가 도움이 될 수 있습니다. –

+0

실행을위한 함수에 코드 블록을 전달하려면 람다가 필요합니다. http://msdn.microsoft.com/en-us/library/bb397687.aspx – Patashu

답변

3

public static void Wrapper(Action<string> myMethod) 
{ 
    //... 
} 

갖는 당신은 lambda expression를 사용 myMethod를 지정할 수 있습니다 당신이 필요로하는 것을 모두하는 인라인 람다 식을 쓸 수있다. MSDN에서

: 람다 표현식을 사용하여

, 당신은 인수로 전달하거나 함수 호출의 값으로 반환 될 수있는 지역의 기능을 쓸 수 있습니다.

+0

래퍼 (의미) => –

+0

의 의미 @RicardoPolo 이것은 액션 a = (s) => {}과 동일합니다. ; 그리고 나서'Wrapper (a);' – horgh

+0

'(s) => {}'은 람다식이 다 – horgh

2

이미 Action 매개 변수를 허용하는 메서드가있는 경우 익명 메서드를 사용하여 일련의 메서드를 그룹화하여 순차적 실행을 할 수 있습니다.

//what you have 
public void RunThatAction(Action TheAction) 
{ 
    TheAction() 
} 

//how you call it 
Action doManyThings =() => 
{ 
    DoThatThing(); 
    DoThatOtherThing(); 
} 
RunThatAction(doManyThings); 

호출하는 방법을 순차적으로 자주, 당신이만큼의 작업을 허용하는 기능을 고려 무언가 인 경우는 ...


public void RunTheseActions(params Action[] TheActions) 
{ 
    foreach(Action theAction in TheActions) 
    { 
    theAction(); 
    } 
} 

//called by 
RunTheseActions(ThisAction, ThatAction, TheOtherAction); 
당신은에서 "말했다 같은 시간 "두 번, 내가 평행을 생각하게합니다. 동시에 여러 가지 방법을 실행하려면 작업을 사용하여 작업을 수행 할 수 있습니다.

public void RunTheseActionsInParallel(params Action[] TheActions) 
{ 
    List<Task> myTasks = new List<Task>(TheActions.Count); 
    foreach(Action theAction in TheActions) 
    { 
    Task newTask = Task.Run(theAction); 
    myTasks.Add(newTask); 
    } 
    foreach(Task theTask in myTasks) 
    { 
    theTask.Wait(); 
    } 
} 
관련 문제