2012-07-01 41 views
0

我正忙于编写我自己的集合类型,并且需要有一个函数 返回集合中值的最大值,其中一个值属性是最大或某些条件成立。如何实现通用最大<TSource>(Func <TSource,TSource> func)

所以我想在底层.NET的收藏品之一叫马克斯(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 

我只是不能似乎figu再出什么,我要在这里做...

回答

2

当你拨打:

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

编译器将此解释为Maxoverloads一个泛型类型之一。无论是明确指出,返回值也应该是TValue类型:

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

,或者使用隐式类型,让编译器理清类型本身:

this.valueSet.Max(func); 
+1

感谢我的一个新手的错误! 。 – Vort3x

相关问题