2010-08-07 10 views
0

Мой код просто:Использование Generic с Func в качестве параметра

public override C Calculator<C>(Team[] teams, Func<Team, C> calculatorFunc) 
    { 
     return teams.Average(calculatorFunc); 
    }  

Я получаю эту ошибку:

Ошибка 2 аргументы типа для метода «System.Linq.Enumerable.Average (System.Collections .Generic.IEnumerable, System.Func) 'не может быть выведено из использования. Попробуйте явно указать аргументы типа.

Как это исправить?

ответ

1

Вы не можете - по крайней мере, в текущей форме. Существует нет Average перегрузки, которая работает на полностью общих значениях (т. Е. Для всех типов C, как вы указали).

Средняя потребность в списках чисел (int, double, float ...) или функция преобразования, которая производит числа. В текущей форме вы можете позвонить Calculator<string>, и для вычисления среднего значения строк не будет абсолютно никакого смысла.

Вам просто нужно ограничить метод конкретным числовым типом (или обеспечить перегрузку), но обобщения просто не сработают.

0

Вместо того чтобы писать:

Calculate(team, calcFunc); 

Вы должны написать:

Calculate<MyClass>(team, calcFunc); 

Однако, вы действительно должны знать, что calculatorFunc возвращается --- я буду считать, что все те, которые вы используете, возвращают один и тот же тип значения (будь он десятичным или int float). В этом случае, вы могли бы определить его как:

public override int Calculator(Team[] teams, Func<Team, int> calculatorFunc) 
{ 
    return teams.Average(calculatorFunc); 
} 

Тогда у вас нет дженерики в декларации на все, чтобы беспокоиться о.

+0

Нет, это об определении метода, не вопрос с называя это. – Dario

+0

Что значит «Рассчитать»? (его калькулятор ...) вы можете написать весь метод по мере необходимости, чтобы его написать? –

1

У метода Enumerable.Average нет перегрузки, которая работает с общим типом. Вы пытаетесь позвонить Average<TSource>(IEnumerable<TSource>, Func<TSource, C>), которого не существует.

Для того, чтобы использовать среднее значение, вам необходимо указать один из типов (для C), что на самом деле существует, например, double, decimal и т.д.

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