我有兩種方法,其中唯一的區別是一個拉姆達斷言:通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