Проблема заключается в классической ковариации / контравариантности дженериков. Вы предполагаете, что поскольку MyDerived1
и MyDerived2
наследуются от MyBase
, то a RetVal<MyDerived1>
наследуется от RetVal<MyBase>
, а это не так.
Самый простой способ исправить это, вероятно, изменить код на:
var list2 = new List<Func<RetVal<MyBase>>>
{
() => (MyBase)test.GetRetValT<MyDerived1>,
() => (MyBase)test.GetRetValT<MyDerived2>
};
или еще лучше, как указывает JS в комментариях, просто измените RetVal<T>
на ковариантный, если это возможно:
public interface IRetVal<out T> { ... }
public class RetVal<T> : IRetVal<T> { ... }
Согласно документации для removeAllAnimations
:
Удалите все анимации, прикрепленные к приемнику .
Вам нужно будет выполнить итерацию подслои и также удалите из них анимацию:
for (CALayer* layer in [containerLayer sublayers]) {
[layer removeAllAnimations];
}