C# 方法重载与接口(interface)参数

标签 c# interface overloading

我很好奇,对于以下示例,什么被认为是“最佳实践”:我有一个数字数组或数字列表,并想将它提供给函数以返回平均值。

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

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

关于C# 方法重载与接口(interface)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688455/

相关文章:

C++在类函数中和类外写入文件

c# - 如何生成下一个主键值

c# - WPF DatePicker 仅显示可用日期

Typescript 自定义类型定义在导入类上中断

java - 为什么以下代码使用接口(interface)但没有定义任何类?

optional-parameters - 如何在 Rust 中使用参数重载或可选参数?

c# - Interlocked.Increment 字典值

c# - 创建 C# 属性以抑制方法执行

pointers - X不实现Y(…方法具有指针接收器)

java - 方法重载和选择最具体的类型