C# 针对单个实例以及IEnumerable的重载方法<;T>;

C# 针对单个实例以及IEnumerable的重载方法<;T>;,c#,polymorphism,C#,Polymorphism,我为IEnumerable创建了两个方法重载以及一个实例: void DoSomething<T>(T arg) where T:class { // do something } void DoSomething<T>(IEnumerable<T> enumerable) where T:class { // do something } 调用单个实例的重载时,使用T作为MyObject[] 是否有人有一个很好的设计,它总是会让我对实现IEnu

我为
IEnumerable
创建了两个方法重载以及一个实例:

void DoSomething<T>(T arg)
   where T:class
{ // do something }
void DoSomething<T>(IEnumerable<T> enumerable)
   where T:class
{ // do something }
调用单个实例的重载时,使用
T
作为
MyObject[]


是否有人有一个很好的设计,它总是会让我对实现
IEnumerable
的任何其他容器(如数组和列表)的
IEnumerable
产生过载?您可以试试这个。基本上在调用方法之前添加铸造。

为什么对
int
有类约束?删除
IEnumerable
重载上的,并将数组强制转换为
(IEnumerable)
对不起,编辑了示例。这只是简化了我的代码…你不能用重载方法来实现
int[]
是一个类,它的匹配性并不比作为
IEnumerable
差,编译器将其解析为找到的第一个匹配项。C#不支持负约束(f.e.,其中t:!IEnumerable)。您唯一的选择是在运行时在代码中进行区分。谢谢,Nick。我得出了同样的结论,并且已经实施了这一点。然而,我希望有更好的东西…@Nick它没有使用“找到的第一个匹配项”。重载没有顺序。当两个重载适用于给定的呼叫站点时,有一组详细的规则说明哪个重载“更好”。在这种情况下,非IEnumerable重载更好。因此,您将责任留给API用户,让他们知道您的API实现不正确,并修复错误?
DoSomething(new MyObject[]{o1,o2,o3})