我很好奇,对于以下示例,什么被认为是“最佳实践”:我有一个数字数组或数字列表,并想将它提供给函数以返回平均值。
是否为每种情况重载方法更好:
double Average(int[] intArray){...}
double Average(uint[] uintArray){...}
double Average(double[] doubleArray){...}
...
double Average(List<int> intList){...}
...
或者,使用某种类型的接口(interface)是否更好:
double Average(IEnumerable arrayOrList)
{
// Branching logic for array or list.
}
谢谢!
编辑
Average
用作示例。我有几种数值算法,需要能够在各种数值数据上运行。
最佳答案
看看 Enumerable.Average Extension Method 的各种重载指导:
public static double Average(this IEnumerable<int> source)
这种风格的方法适用于任何实现 IEnumerable<T> 的集合类型( T[] , List<T> , HashSet<T> , ReadOnlyCollection<T> , ...)并避免非通用 IEnumerable 产生的开销争论。因为 C# 没有 where T : num
constraint ,您需要为您希望支持的所有原始类型提供重载(Int32、Int64、Single、Double、Decimal、...)。
关于C# 方法重载与接口(interface)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688455/