如果我在错误的社区发帖,我很抱歉,我在这里很新.
我有多个方法使用相同的foreach循环,只更改我调用的内部方法:
public void CalculationMethod1()
{
foreach (Order order in ordersList)
{
foreach (Detail obj_detail in order.Details)
{
CalculateDiscount(obj_detail);
}
}
}
public void CalculationMethod2()
{
foreach (Order order in ordersList)
{
foreach (Detail obj_detail in order.Details)
{
CalculateTax(obj_detail);
}
}
}
Run Code Online (Sandbox Code Playgroud)
每个内部方法都有不同的逻辑,数据库搜索,数学计算(这里不重要).
我想调用上面的方法而不是每次都重复foreach循环,所以我将通过以下解决方案:
public void CalculateMethod_3()
{
foreach (Order obj_order in ordersList)
{
foreach (Detail obj_detail in order.Details)
{
CalculateDiscount(obj_detail);
CalculateTax(obj_detail);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我陷入了规则问题:
class Program
{
static void Main(string[] args)
{
Calculation c = new Calculation();
c.CalculateMethod_3();
c.AnotherMethod_4(); //It doesn't use objDetail
c.AnotherMethod_5(); //It doesn't use objDetail
c.CalculateMethod_6(); //Method 6 needs objDetail but respecting the order of the methods, so It must be after AnotherMethod_4 and AnotherMethod_5
}
}
Run Code Online (Sandbox Code Playgroud)
如何创建一个方法来实现我的目标(我不想重复代码)尊重上面的规则?
您始终可以将委托传递给该方法,然后您可以基本上执行任何操作.
public void ApplyToDetails(Action<Detail> callback)
{
foreach (Order order in ordersList)
{
foreach (Detail obj_detail in order.Details)
{
callback(obj_detail);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用你做这样的事情
ApplyToDetails(detail => CalculateTax(detail));
ApplyToDetails(detail =>
{
CalculateDiscount(detail);
CalculateTax(detail);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |