C#通用类型约束

joh*_*ohn 2 c# generics methods type-constraints

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

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

谢谢!

Hei*_*nzi 6

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

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

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

正如其他人已经提到的,如果你只是想计算一个平均值,那么这个方法已经存在于框架中.


Mar*_*ell 6

我只是使用IEnumerable<double>,因为您需要做的就是遍历数据(并且列表和数组都支持这一点,延迟序列也是如此).

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

var avg = sequence.Average();
Run Code Online (Sandbox Code Playgroud)

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