C#Action <t>,将函数作为参数传递</t>

时间:2011-01-31 23:48:31

标签: c#

我想将一个条件作为Action传递给另一个方法。 “ComputerPriceGenerator”中的第一行有效,但如何使数组工作(第二行)?任何想法

我正在寻求建议......,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;
}

3 个答案:

答案 0 :(得分:10)

您的CalculatePrice方法不应仅使用Action,IMO - 这两种方法都应该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);

答案 1 :(得分:1)

由于您希望将该方法应用于数组的所有元素,因此您无法绕过它进行迭代。

您可以定义PriceMachine.CalculateAllPrice

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

答案 2 :(得分:1)

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

然后让CalculateAllPrice遍历cart.Computers并将每一个传递给匿名函数。