我有这个简单的代码:
public interface IReader<out T>
{
IEnumerable<T> GetData();
}
这个接口应该在 T 上是协变的,我正在以这种方式使用它:
private static Func<bool> MakeSynchroFunc<T>(IReader<T> reader) where T : IComposite
{
return () => Synchronize(reader);
}
注意 T 实现 IComposite 的约束。同步方法接受一个IReader<IComposite>
in 输入:
private static bool Synchronize(IReader<IComposite> reader)
{
// ......
}
编译器告诉我,尽管有 T 的约束和 IReader 的协方差,但它无法从IReader<T>
to转换。IReader<IComposite>
我在这里做错了什么吗?编译器应该能够验证约束并且协方差应该让我使用 my IReader<T>
as IReader<Icomposite>
,不是吗?
谢谢。