CSh*_*oob 4 c# delegates functional-programming
我需要一些简化方法的帮助
我有这个方法
public double ComputeBasicAmount(double basicLimit, double eligibleAmt)
{
return basicLimit * eligibleAmt;
}
Run Code Online (Sandbox Code Playgroud)
样品用量:
Foo foo = new Foo(100, 1000);
double basicAmt = ComputeBasicAmount(foo.BasicLimit, foo.EligibleAmt)
Run Code Online (Sandbox Code Playgroud)
这里的问题是我希望qualifiedAmt是动态的,因为有时候它不仅仅是我传递给方法的eligbleAmt ..就像这样
Foo foo = new Foo(100, 1000);
double basicAmt = ComputeBasicAmount(foo.BasicLimit, foo.EligibleAmt/foo.RoomRate)
Run Code Online (Sandbox Code Playgroud)
我的解决方案是使用Func委托作为参数,但我不知道如何正确使用它
我想要这样的功能
public double ComputeBasicAmount<T>(double basicLimit, Func<T, double> multiplier)
{
return basicLimt * multiplier;
}
double basicAmt = ComputeBasicAmount<Foo>(foo.BasicLimit, x => x.EligibleAmt/x.RoomRate)
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗.提前致谢...
如果乘数取决于该项目,然后要么你就需要通过该项目为好,或者你需要返回Func<T, double>:
public double ComputeBasicAmount<T>(double basicLimit,
Func<T, double> multiplier,
T item)
{
return basicLimt * multiplier(item);
}
...
double basicAmt = ComputeBasicAmount<Foo>(
foo.BasicLimit,
x => x.EligibleAmt / x.RoomRate,
foo)
Run Code Online (Sandbox Code Playgroud)
要么
public Func<T, double> ComputeBasicAmount<T>(double basicLimit,
Func<T, double> multiplier)
{
return item => basicLimt * multiplier(item);
}
...
var basicAmtFunc = ComputeBasicAmount<Foo>(
foo.BasicLimit,
x => x.EligibleAmt / x.RoomRate);
var basicAmt = basicAmntFunc(foo);
Run Code Online (Sandbox Code Playgroud)
如果这些都不是您想要的,请解释您希望提供实际值的位置T,以便您可以计算乘数.
第一个非常类似于只Func<double>计算乘数,当然......这反过来就像在计算参数时调用它Func<double>,回到原来只需要两个双精度的版本.