我之前从未使用过泛型,并且想知道如何将Type约束为Double[]
或List<Double>
(或者如果这是正确的事情)。我需要计算有时预先知道的许多数字的平均值(即我可以创建一个确切大小的数组),但在其他时候,是在计算之前立即生成的(即我使用List)。
我希望这个通用方法Average(T arrayOrList)
能够接受数组或列表,而不是重载Average()
方法。
谢谢!
答案 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();
答案 2 :(得分:2)
为什么不写一个接受IEnumerable<double>
的函数?
然后,如果你真的想使用ArrayList
,我认为不是选择,你可以使用AsEnumerable()
扩展。
答案 3 :(得分:0)
var x = new List(); var average = x.Average(); var y = new Double [10]; var average = y.Average();