C#通用类型约束

时间:2011-08-11 15:39:44

标签: c# generics methods type-constraints

我之前从未使用过泛型,并且想知道如何将Type约束为Double[]List<Double>(或者如果这是正确的事情)。我需要计算有时预先知道的许多数字的平均值(即我可以创建一个确切大小的数组),但在其他时候,是在计算之前立即生成的(即我使用List)。

我希望这个通用方法Average(T arrayOrList)能够接受数组或列表,而不是重载Average()方法。

谢谢!

4 个答案:

答案 0 :(得分:6)

由于double[]List<double>同时实施IEnumerable<double>,我建议如下:

public double Average(IEnumerable<double> arrayOrList) {
    // use foreach to loop through arrayOrList and calculate the average
}

这是简单的子类型多态,不需要泛型。

正如其他人已经提到过的,如果您只想计算平均值such a method already exists in the framework

答案 1 :(得分:6)

我只会使用IEnumerable<double>,因为您需要做的只是循环数据(并且列表和数组都支持此功能,延迟序列也是如此)。

事实上,微软首先到达那里:

var avg = sequence.Average();

http://msdn.microsoft.com/en-us/library/bb358946.aspx

答案 2 :(得分:2)

为什么不写一个接受IEnumerable<double>的函数?

然后,如果你真的想使用ArrayList,我认为不是选择,你可以使用AsEnumerable()扩展。

编辑,似乎我是miread ArrayOrList,但答案仍然适用,虽然它已经晚了56秒

答案 3 :(得分:0)

var x = new List(); var average = x.Average(); var y = new Double [10]; var average = y.Average();