我正在忙着编写自己的集合类型,需要有一个函数 Max返回集合中的值,其中value属性之一是max或某个条件成立。
所以我试图在其中一个底层.net集合上调用Max(Func< ...),但是 我似乎无法让它发挥作用:
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
我似乎无法弄清楚我应该在这做什么......
答案 0 :(得分:2)
致电时:
this.valueSet.Max<TValue>(func);
编译器将其解释为具有一种泛型类型的Max
overloads之一。要么明确指出返回值也应该是TValue
类型:
this.valueSet.Max<TValue, TValue>(func);
或使用隐式类型,让编译器自己整理类型:
this.valueSet.Max(func);