我只是好奇,以下示例被认为是“最佳做法”:我有数字数组或数字列表,并希望将其提供给函数以返回平均值。
为每种情况重载方法是否更好:
double Average(int[] intArray){...}
double Average(uint[] uintArray){...}
double Average(double[] doubleArray){...}
...
double Average(List<int> intList){...}
...
或者,使用某种类型的界面是否更好:
double Average(IEnumerable arrayOrList)
{
// Branching logic for array or list.
}
谢谢!
修改
Average
用作示例。我有几个数字算法需要能够运行各种数字数据。
答案 0 :(得分:3)
请查看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,...)。
答案 1 :(得分:1)
接口允许您提供数组或任何其他集合。您可能希望使用类似IEnumerable<int>
的强类型界面。
答案 2 :(得分:0)
假设Average
只是一个例子,你应该使用IEnumerable但是用你的数据类型重载函数,如下所示:IEnumerable<DataType>
例如:
double Average(IEnumerable<Int32> array){...}
double Average(IEnumerable<Double> array){...}