Объект List<MyClass>
все еще может быть просто передан вашей реализации интерфейса, потому что List может быть неявно приведен к object
(как и все объекты).Если компилятор жалуется из-за того, как вы настроили свой код (я должен сказать, что, поскольку вы на самом деле не показывали нам какой-либо код), вы можете явно привести его:
myInterfaceFunction((object) myList);
или:
myInterfaceFunction(myList as object);
Если вы хотите разыграть содержимое списка и передать List<object>
, когда у вас уже есть List<MyClass>
, тогда вы можете просто сделать это:
myInterfaceFunction(myList.Cast<object>().ToList());
(вы можете избавиться от ToList () , если ваша интерфейсная функция использует IEnumerable<object>
вместо List<object>
).
Вот краткий пример.Это хороший пример моего комментария о явном приведении к object
- по умолчанию вызов MyFunction(myList)
перейдет к функции MyFunction(IEnumerable<object> blah)
- вы должны явным образом привести его к принудительному переходу к функции MyFunction(object blah)
.
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<MyObject> myList = new List<MyObject>();
MyFunction(myList);
MyFunction((object)myList);
MyFunction(myList.Cast<object>().ToList());
MyFunction(myList.Cast<object>());
}
public static void MyFunction(List<object> blah)
{
Console.WriteLine(blah.GetType().ToString());
}
public static void MyFunction(IEnumerable<object> blah)
{
Console.WriteLine(blah.GetType().ToString());
}
public static void MyFunction(object blah)
{
Console.WriteLine(blah.GetType().ToString());
}
}
public class MyObject { }
}