Вы должны объявить ваш ICustomCollection<T>
интерфейс как ковариантный
public interface ICustomCollection<out T> : IEnumerable<T>
{
}
В противном случае он инвариантен и вы можете привести его только к тому же типу, который использовался для объявления, который был Todo
классом, а не ITodo
interface.
IEnumerable<T>
уже имеет ковариантный параметр типа generi c T
, поэтому первое свойство работает, как и ожидалось.