首页 > 解决方案 > 单实例和 IEnumerable 的重载方法

问题描述

我为一个方法IEnumerable<T>和一个实例创建了两个重载:

void DoSomething<T>(T arg)
   where T:class
{ // do something }
void DoSomething<T>(IEnumerable<T> enumerable)
   where T:class
{ // do something }

问题是数组和列表不被识别为IEnumerable<T>,对于诸如

DoSomething(new MyObject[]{o1,o2,o3})

单个实例的重载是用Tbeing调用的MyObject[]

有没有人有一个很好的设计,总是让我IEnumerable<T>对任何其他实现的容器IEnumerable<T>(例如数组和列表)都超载?

标签: c#polymorphism

解决方案


你可以试试这个。基本上在调用方法之前添加转换。 https://dotnetfiddle.net/Xwqp5n


推荐阅读