c#泛型类型约束
本文关键字:约束 泛型类型 | 更新日期: 2023-09-27 18:05:22
我以前从未使用过泛型,并且想知道如何将类型约束为Double[]
或List<Double>
(或者这是否是正确的事情)。我需要计算许多数字的平均值,这些数字有时是事先已知的(例如,我可以创建一个精确大小的数组),但在其他时候,这些数字是在计算之前立即生成的(例如,我使用List)。
我希望这个通用方法Average(T arrayOrList)
能够接受数组或列表,而不是重载Average()
方法。
谢谢!
既然double[]
和List<double>
都实现了IEnumerable<double>
,我建议如下:
public double Average(IEnumerable<double> arrayOrList) {
// use foreach to loop through arrayOrList and calculate the average
}
这是简单的子类型多态性,不需要泛型。
正如其他人已经提到的,如果您只是想计算平均值,那么在框架中已经存在这样的方法。
我将只使用IEnumerable<double>
,因为您所需要做的就是遍历数据(列表和数组都支持这一点,延迟序列也是如此)。
事实上,微软是第一个:
var avg = sequence.Average();
http://msdn.microsoft.com/en-us/library/bb358946.aspx 为什么不直接写一个接受IEnumerable<double>
的函数呢?
如果你真的想使用ArrayList
,我认为你可以使用AsEnumerable()
扩展。
编辑,似乎我误读了ArrayOrList,但答案仍然适用,虽然它晚了56秒
var x = new List();var average = x.Average();var y = new Double[10];var average = y.Average();