有人可以解释一下为什么我收到要求显式强制转换的编译错误吗?由于我限制了输出,因此我认为无需任何蛮力就可以允许这样做。
** 谢谢大家。它混淆了我提出问题的方式。 **
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
返回元素序列,而不是页面序列,每个元素本身都是页面序列,每个元素本身都是无限页面序列。