如何实现泛型Max <tsource>(Func <tsource,tsource> func)</tsource,tsource> </tsource>

时间:2012-07-01 08:06:39

标签: collections max func

我正在忙着编写自己的集合类型,需要有一个函数 Max返回集合中的值,其中value属性之一是max或某个条件成立。

所以我试图在其中一个底层.net集合上调用Max(Func&lt; ...),但是 我似乎无法让它发挥作用:

public TValue MaxValue(Func<TValue,TValue> func)
{
  return this.valueSet.Max<TValue>(func);
}

但我收到2个错误:

Argument 2: cannot convert from 'System.Func<TValue,TValue>' to System.Func<TValue,int>'

'System.Collections.Generic.SortedSet<TValue>' does not contain a definition for 'Max'
 and the best extension method overload 'System.Linq.Enumerable.Max<TSource>(System.Collections.Generic.IEnumerable<TSource>,
System.Func<TSource,int>)' has some invalid arguments

我似乎无法弄清楚我应该在这做什么......

1 个答案:

答案 0 :(得分:2)

致电时:

this.valueSet.Max<TValue>(func);

编译器将其解释为具有一种泛型类型的Max overloads之一。要么明确指出返回值也应该是TValue类型:

this.valueSet.Max<TValue, TValue>(func);

或使用隐式类型,让编译器自己整理类型:

this.valueSet.Max(func);