我有两种方法,其中唯一的区别是一个拉姆达断言:通lambda作为参数
public static double LowerQuartile(this IOrderedEnumerable<double> list)
{
var median = list.Median();
var elements = list.Where(x => x < median).ToList();
if (!list.Contains(median))
elements.Add(median);
return elements.OrderBy(x => x).Median();
}
public static double UpperQuartile(this IOrderedEnumerable<double> list)
{
var median = list.Median();
var elements = list.Where(x => x > median).ToList();
if (!list.Contains(median))
elements.Add(median);
return elements.OrderBy(x => x).Median();
}
所以我想加入他们,并传递一个lambda作为参数。我试着用这样的东西:
public static double CalculateQuartile(IOrderedEnumerable<double> list, Expression<Func<IOrderedEnumerable<double>,bool>> predicate)
{
var median = list.Median();
var elements = list.Where(predicate).ToList();
if (!list.Contains(median))
elements.Add(median);
return elements.OrderBy(x => x).Median();
}
但它不起作用。我怎么能这样做?
老实说,我会加入你和L.B.答案和我将保留CalculateUpperQuartile和CalculateLowerQuartile两种方法,但他们将使用第三种方法并通过谓词,这样最终用户仍有可能选择。 – kosnkov