簡體   English   中英

C#動作 <T> ,傳遞函數作為參數

[英]C# Action<T>, Pass function as parameter

我想將一個條件作為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;
}

你的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);

由於您希望將該方法應用於數組的所有元素,因此您無法繞過它進行迭代。

你可以這樣定義PriceMachine.CalculateAllPrice

public void CalculateAllPrice(IEnumerable<Computer> data, Action<Computer> action)
{
  foreach(Computer c in data)
    action(c);
}
PriceMachine.CalculateAllPrice(cart.Computers, (Computer x) => ComputerConverter(x));

然后使CalculateAllPrice迭代通過cart.Computers並將每個傳遞給匿名函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM