2012-07-01 3 views
0

Я занят написанием своего собственного типа коллекции и должен иметь функцию Макс, возвращающий значение в коллекции, где один из атрибутов значения является max или некоторое условие.Как реализовать общий Max <TSource> (Func <TSource, TSource> func)

Так что я пытаюсь вызвать Max (Func < ...) на одной из основных .net коллекций, но я не могу заставить его работать:

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

Смежные вопросы