Передача общей коллекции объектов в метод, который требует коллекцию базового типа

Скажем, у меня есть метод, который ожидает универсальный параметр коллекции базового типа, см.Test.MethodA(IEnumerable(BaseClass) listA) ниже. Почему, когда я передаю ему коллекцию производного типа, код не будет собираться? Не все случаиDerivedClass также бытьBaseClass?

Я мог бы просто создать новыйList(BaseClass) и передал этоMethodA(IEnumerable(BaseClass) listA), Но я думаю, что C # был бы достаточно умен, чтобы знать, что коллекция DerivedClass имеет все те же свойства, что и коллекция BaseClass.

Является ли использование метода List.Cast (T) (), как я показал, наилучшим способом решения этой проблемы?

abstract class BaseClass
{
    public int SomeField;
    public abstract string SomeAbstractField
    {
        get;
    }
}

class DerivedClass:BaseClass
{
    public override string SomeAbstractField
    {
        get { return "foo"; }
    }
}

class TestClass
{ 

    public void MethodA(IEnumerable<BaseClass> listA)
    {

    }

    public void MethodB()
    {
        List<DerivedClass> listB = new List<DerivedClass>();

        //Error 16  The best overloaded method match for 
        //TestClass.MethodA(List<BaseClass>)' 
        //has some invalid arguments
        this.MethodA(listB);

        //this works
        this.MethodA(listB.Cast<BaseClass>());
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос