2010-08-07 3 views
0

내 코드는 단순히 :

오류 2 System.Linq.Enumerable.Average '메서드의 형식 인수 (은 System.Collections :

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

나는이 오류 .Generic.IEnumerable, System.Func) '은 사용법에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정하십시오.

어떻게 해결할 수 있습니까? 대신 글을 쓰는

답변

1

적어도 현재 양식은 사용할 수 없습니다. 완전히 일반적인 값 (즉, 사용자가 지정한대로 모든 유형 C)에서 작동하는 Average 오버로드가 없습니다.

평균 숫자 목록 (int, double, float ...) 또는 숫자를 생성하는 변환 함수가 필요합니다. 현재 양식에서는 Calculator<string>을 호출 할 수 있으며 문자열의 평균을 계산하는 것은 전혀 의미가 없습니다.

메서드를 특정 숫자 형식으로 제한하거나 오버로드를 제공해야하지만 제네릭은 단순히 작동하지 않습니다.

0

: 당신은해야합니다

Calculate(team, calcFunc); 

는 쓰기 :

Calculate<MyClass>(team, calcFunc); 

그러나, 당신이 정말로 calculatorFunc이 --- 내가 모든 가정거야 반환 무엇을 알아야한다 사용하는 값은 같은 값 유형 (십진수 또는 부동 소수점)이 반환됩니다. 어떤 경우에는 다음과 같이 정의 할 수 있습니다.

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,