在earlier question about generic variance中,我被告知可以修改IEnumerable<T>
的成员。如何做到这一点,并且当可以修改协变类型时出现方差违规,那么IEnumerable<T>
T
如何$posts= Post->orderBy('id', 'desc')
->distinct()
->paginate(3);
可以协变?
答案 0 :(得分:5)
你必须区分修改序列和修改它的元素。
您可以毫无问题地修改元素,因为您无法通过使用属性和函数来修改对象的类型。
因此,这一切都很好,因为IEnumerable<T>
中的所有元素都是T
或从T
派生的类型。
您提到的此类违规行为只有在您可以拥有Base
IEnumerable<Derived>
类型的对象时才会发生