C#方法重载与接口参数

本文关键字:接口 参数 重载 方法 | 更新日期: 2023-09-27 18:10:45

我只是想知道以下示例的"最佳实践"是什么:我有一个数字数组或数字列表,并希望将其提供给一个函数以返回平均值。

对于每种情况,是否最好重载方法:

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.
}

谢谢!

编辑

以CCD_ 1为例。我有几个数字算法,需要能够在各种数字数据上运行。

C#方法重载与接口参数

看看Enumerable的各种重载。制导的平均扩展方法:

public static double Average(this IEnumerable<int> source)

这种风格的方法适用于实现IEnumerable<T>(T[],List<T>,HashSet<T>,ReadOnlyCollection<T>,…(,并避免了由非通用IEnumerable参数引起的开销。由于C#没有where T : num约束,因此需要为您希望支持的所有基元类型(Int32、Int64、Single、Double、Decimal…(提供重载。

接口将允许您提供数组或任何其他集合。不过,您可能希望使用像IEnumerable<int>这样的强类型接口。

假设Average只是一个例子,您应该使用IEnumerable,但使用您的数据类型重载函数,如下所示:IEnumerable<DataType>

例如:

double Average(IEnumerable<Int32> array){...}
double Average(IEnumerable<Double> array){...}