有人可以解释一下为什么我收到要求显式强制转换的编译错误吗?由于我限制了输出,因此我认为无需任何蛮力就可以允许这样做。

** 谢谢大家。它混淆了我提出问题的方式。 **

public interface IQuery<TInput, TOutput>
{
    TOutput Execute(TInput input);
}

public abstract class PagedQuery<TInput, TOutput> : IQuery<TInput, TOutput>
    where TOutput : IEnumerable<TOutput>
{
    public TOutput Execute(TInput input)
    {
        return Enumerable.Empty<TOutput>(); // error here..
    }
}

最佳答案

Enumerable.Empty<TOutput>()返回IEnumerable<TOutput>的实现。仅仅因为TOutput也实现了IEnumerable<TOutput>并不意味着您可以将任何IEnumerable<TOutput>值转换为TOutput

我同意评论员的观点,顺便说一句,约束TOutput返回自身序列是很奇怪的。

我怀疑您实际上想要这样的东西:

public abstract class PagedQuery<TInput, TElement>
    : IQuery<TInput, IEnumerable<TElement>>
{
    public IEnumerable<TElement> Execute(TInput input)
    {
        return Enumerable.Empty<TElement>();
    }
}


这对我来说更有意义。

编辑:我已将类型参数重命名为使其更清晰。因此,对于IQuery<,>TOutput=IEnumerable<TElement>-PagedQuery返回元素序列,而不是页面序列,每个元素本身都是页面序列,每个元素本身都是无限页面序列。

08-17 02:51