目前我正在创建一个接受参数的扩展方法.使用下面的示例,如何使用lambda表达式转换它?
public static decimal ChangePercentage(this IEnumerable<Trade> trades, DateTime startDate, DateTime endDate)
{
var query = from trade in trades
where trade.TradeTime >= startDate
where trade.TradeTime <= endDate
orderby trade.TradeTime descending
select trade;
return (query.First().Value - query.Last().Value) / query.First().Value * 100;
}
Run Code Online (Sandbox Code Playgroud)
使用lambda vs normal方法参数的优缺点是什么?
谢谢
更改样本以使用lambda表达式的一种方法是使用过滤器.
public static decimal ChangePercentage(this IEnumerable<Trade> trades,
Func<Trade,bool> pred)
{
var query = from trade in trades
where pred(trade);
orderby trade.TradeTime descending
select trade;
return (query.First().Value - query.Last().Value) / query.First().Value * 100;
}
someTrades.ChangePercentage(x => x.TradeDate >= startDate && x.TradeTime <= endDate);
Run Code Online (Sandbox Code Playgroud)
这给你的最大专业是灵活性.而不是使用基于日期过滤进行计算的方法.您有一种方法,使用灵活的过滤方法来计算百分比.
你想用一个lambda表达式替换startDate和endDate参数吗?
public static decimal ChangePercentage(this IEnumerable<Trade> trades, DateTime startDate, DateTime endDate)
{
return trades.ChangePercentage(trade => trade.TradeTime >= startDate
&& trade.TradeTime <= endDate);
}
public static decimal ChangePercentage(this IEnumerable<Trade> trades, Func<Trade, bool> filter)
{
var query = from trade in trades
where filter(trade)
orderby trade.TradeTime descending
select trade;
return (query.First().Value - query.Last().Value) / query.First().Value * 100;
}
Run Code Online (Sandbox Code Playgroud)