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于您指定的所有类型)。

平均值需要数字列表 ( int, double, float...) 或生成数字的转换函数。在当前形式中,您可以调用Calculator<string>,但计算字符串的平均值绝对没有意义。

您只需将方法限制为特定的数字类型(或提供重载),但泛型根本不起作用。

于 2010-08-07T18:41:11.000 回答
1

Enumerable.Average方法没有适用于泛型类型的重载。您正在尝试调用Average<TSource>(IEnumerable<TSource>, Func<TSource, C>)不存在的 。

为了使用平均值,您需要指定实际存在的类型之一(对于 C),例如double,decimal等。

于 2010-08-07T18:42:22.177 回答
0

而不是写:

Calculate(team, calcFunc);

你必须写:

Calculate<MyClass>(team, calcFunc);

但是,您确实应该知道calculatorFunc 返回的是什么——我将假设您使用的所有这些都返回相同的值类型(无论是十进制还是浮点整数)。在这种情况下,您可以将其定义为:

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

那么你在声明中就没有泛型需要担心了。

于 2010-08-07T18:36:17.890 回答