dou*_*ret 9 .net c# covariance
我有这个简单的代码:
public interface IReader<out T>
{
IEnumerable<T> GetData();
}
Run Code Online (Sandbox Code Playgroud)
这个接口应该在T上协变,我用这种方式:
private static Func<bool> MakeSynchroFunc<T>(IReader<T> reader) where T : IComposite
{
return () => Synchronize(reader);
}
Run Code Online (Sandbox Code Playgroud)
注意T的约束来实现IComposite.同步方法接受IReader<IComposite>输入:
private static bool Synchronize(IReader<IComposite> reader)
{
// ......
}
Run Code Online (Sandbox Code Playgroud)
编译器告诉我它无法转换IReader<T>为IReader<IComposite>尽管T的约束和IReader的协方差.
我在这里做错了吗?编译器应该能够验证约束,协方差应该让我使用我IReader<T>的IReader<Icomposite>,不是吗?
谢谢.
您应该可以通过添加class约束来解决您的问题T.当涉及结构(IEnumerable<int>不可转换为IEnumerable<object>)时,协方差不起作用.由于你没有被限制T为一个类,你可以传入一个IReader<some struct that implements IComposite>不可转换的.
| 归档时间: |
|
| 查看次数: |
369 次 |
| 最近记录: |