C#方法重载与接口参数

时间:2011-10-07 14:11:48

标签: c# interface overloading

我只是好奇,以下示例被认为是“最佳做法”:我有数字数组或数字列表,并希望将其提供给函数以返回平均值。

为每种情况重载方法是否更好:

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用作示例。我有几个数字算法需要能够运行各种数字数据。

3 个答案:

答案 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,因此您需要为您希望支持的所有原始类型提供重载(Int32Int64SingleDoubleDecimal,...)。

答案 1 :(得分:1)

接口允许您提供数组或任何其他集合。您可能希望使用类似IEnumerable<int>的强类型界面。

答案 2 :(得分:0)

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

例如:

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