0

私のコードは単純です:

  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)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

どうすればこれを修正できますか?

4

3 に答える 3

1

できません - 少なくとも現在の形式では。Average完全にジェネリックな値 (つまり、指定したすべての型) で機能するオーバーロードはありませんC

平均には、数値のリスト ( intdoublefloat...) または数値を生成する変換関数が必要です。現在の形式ではCalculator<string>、文字列の平均を計算することはまったく意味がありません。

メソッドを特定の数値型に制限する (またはオーバーロードを提供する) だけで済みますが、ジェネリックは機能しません。

于 2010-08-07T18:41:11.000 に答える
1

Enumerable.Averageメソッドには、ジェネリック型で機能するオーバーロードがありません。Average<TSource>(IEnumerable<TSource>, Func<TSource, C>)存在しないを呼び出そうとしています。

double平均を使用するには、、 など、実際に存在する型 (C の場合) の 1 つを指定する必要がありますdecimal

于 2010-08-07T18:42:22.177 に答える
0

書く代わりに:

Calculate(team, calcFunc);

あなたは書く必要があります:

Calculate<MyClass>(team, calcFunc);

ただし、calculatorFunc が何を返すかを本当に知っておく必要があります --- 使用するものはすべて同じ値の型を返すと仮定します (10 進数であるか、浮動小数点の int であるかに関係なく)。その場合、次のように定義できます。

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

次に、心配する宣言にジェネリックがまったくありません。

于 2010-08-07T18:36:17.890 に答える