Dlaczego ten rodzajowy rzut nie działa?

Mam następujące dziedzictwo:

internal abstract class TeraRow{}

internal class xRow : TeraRow {} // xRow is a child of TeraRow

public IEnumerable<TeraRow> Compare(MappedTables which, DateTime selectionStart
        , DateTime selectionEnd, string pwd)
{
    IEnumerable<xRow> result=CompareX();
    return  (IEnumerable<TeraRow>)result; //Invalid Cast Exception? 

}

Nie można rzutować obiektu typu „System.Collections.Generic.List1[xRow]' to type 'System.Collections.Generic.IEnumerable1 [TeraRow]

Dlaczego w ogóle muszę go rzucać?

questionAnswers(4)

yourAnswerToTheQuestion