2011-01-31 2 views
3

다른 메서드로 조건을 동작으로 전달하려고합니다. "ComputerPriceGenerator"의 첫 번째 줄은 작동하지만, 어떻게 배열 작업 (두 번째 줄)를 만들기 위해? ..C# 동작 <T>, 매개 변수로 함수 전달

내가 조언을 찾고 있어요 어떤 아이디어가 ..., CalculateAllPrice이

public void ComputerPriceGenerator() 
{ 
    //Below line Works 
    PriceMachine.CalculatePrice(cart.Computers[0],() => ComputerConverter(cart.Computers[0]));   
    //How to make this work, i don't want to loop it??? 
    PriceMachine.CalculateAllPrice(cart.Computers,() => ComputerConverter(??)); 
} 

public void ComputerConverter(Computer comp) 
{ 
    if (comp.Memory <= 2) 
     comp.Discount = 10; 
} 
+2

귀하의 코드는 LINQ를 사용할 수있는 좋은 후보했을 것이다, 그러나 그것은 부작용이 가득합니다. 나는 리팩토링을 고려할 것이다. –

+1

CalculatePrice 및 CalculateAllPrice의 서명을 보여주지 않으면 어떻게 도와 줄지 알 수 없습니다. –

+2

@Jon Skeet : CalculateAllPrice의 서명이 무엇인지에 관해서 부분적으로 조언을 구하는 것처럼 보였습니다. 그래도 나는 잘못 될 수 있습니다. –

답변

10

귀하의 CalculatePrice 방법 - 두 가지 방법이 Action<Computer>을해야한다.

public static void CalculatePrice(Computer computer, Action<Computer> action) 
public static void CalcuateAllPrices(IEnumerable<Computer> computers, 
            Action<Computer> action) 

을이처럼 전화 : 그래서 이런 방법을 것

PriceMachine.CalculatePrice(cart.Computers[0], ComputerConverter); 
PriceMachine.CalculateAllPrice(cart.Computers, ComputerConverter); 
+0

고마워요. – kayak

+0

Jon, 해결되지 않은 질문이 있습니다. (이 질문은이 문제와 관련이 없으며, 나는 이것을 삭제합니다.) .. 제안이 있다면 알려주십시오. "http://stackoverflow.com/questions/4444972/iterate-a-linq-expression-and-db-into-db-parameter " – kayak

+1

@ 카약 : 거기에 대한 답변은 내가 원하는대로 말합니다. 당신은 거의 확실하게 그 길을 가고 싶지 않습니다. –

1

아직 설계되지 않았습니다 배열의 모든 요소에이 메서드를 적용하려면 반복 할 필요가 없습니다.

public void CalculateAllPrice(IEnumerable<Computer> data, Action<Computer> action) 
{ 
    foreach(Computer c in data) 
    action(c); 
} 
+0

동의하지만 실행 방법은 전달합니다. 주된 방법 "PriceMachine.CalculateAllPrice (cart.Computers,() => ComputerConverter (??));"에서 " – kayak

1
PriceMachine.CalculateAllPrice(cart.Computers, (Computer x) => ComputerConverter(x)); 

그런 cart.Computers을 통해 CalculateAllPrice으로 반복을하고 익명 함수에 각각 전달 :

당신은 같은 PriceMachine.CalculateAllPrice을 정의 할 수 있습니다. 그냥 Action, IMO 복용해서는 안

+1

조금 과장된 것 같습니다. '(cart.Computers, (Computer x) => ComputerConverter (x))'는'(cart.Computers, ComputerConverter)'와 동일합니다. – Juliet

+0

@Juliet : 물론, 나는 그가 게시 한 람다 스타일을 유지하고 있었다. –

관련 문제