LINQ如何返回IEnumerable 如果接口无法实例化? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LINQ如何返回IEnumerable 如果接口无法实例化? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有以下方法:

   public IEnumerable<T> Filter(IEnumerable<T> products, ISpecification<T> specification)
    {
        return products.Where(specification.IsFulfilled);

    }

一切正常,但在编写这个方法之后我开始怀疑 - 如果接口无法实例化,LINQ如何返回IEnumerable?我能以另一种方式返回这个IEnumerable吗?可能我可以使用foreach和yield,但我又不明白为什么我能够以这种方式返回IEnumerable。我错过了什么?

答案

您可以返回对接口的引用并具有接口的变量,因为某处将有一个实现接口的类。 LINQ将返回一个实现IEnumerable的内部类,你将永远不知道它是什么,不是你应该。

另一答案

这里的基本问题是“如何在无法实例化时返回接口?”,当然,您可以:

public IFruit GetProduce()
{
    return new Apple();
}

这基本上是一样的:你不必实例化接口,你可以返回实现它的东西。

特别是对于IEnumerable<T>,正如你所提到的,yield也是一种选择。

以上是关于LINQ如何返回IEnumerable 如果接口无法实例化? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# IEnumerator IEnumerable接口

结果为空时LINQ返回啥

LINQ 的具体程度如何。包含 IEnumerable 结果?

linq-IEnumerable,IEnumerator

深入理解IEnumerable和IQueryable两接口的区别

深入理解IEnumerable和IQueryable两接口的区别