C# LINQ如何返回IEnumerable<;T>;如果接口无法实例化?

C# LINQ如何返回IEnumerable<;T>;如果接口无法实例化?,c#,linq,interface,instantiation,C#,Linq,Interface,Instantiation,我有以下方法: public IEnumerable<T> Filter(IEnumerable<T> products, ISpecification<T> specification) { return products.Where(specification.IsFulfilled); } 公共IEnumerable过滤器(IEnumerable产品,ISpecification规范) { 退货产品。在哪里(符合

我有以下方法:

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

    }
公共IEnumerable过滤器(IEnumerable产品,ISpecification规范)
{
退货产品。在哪里(符合规范);
}
一切都很好,但在编写了这个方法之后,我开始思考——如果接口无法实例化,LINQ如何返回IEnumerable?我能用另一种方式返回这个IEnumerable吗?也许我可以使用foreach和yield,但我还是不明白为什么我能够以这种方式返回IEnumerable。
我缺少什么?

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

public IFruit GetProduce()
{
    return new Apple();
}
这本质上是一样的:您不必实例化接口,您可以返回实现它的东西


特别是对于
IEnumerable
,正如您所提到的,这也是一个选项。

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

public IFruit GetProduce()
{
    return new Apple();
}
这本质上是一样的:您不必实例化接口,您可以返回实现它的东西


特别是对于
IEnumerable
,正如您所提到的,也是一个选项。

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

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

我建议您这样做。阅读后,我相信您会理解整个内容。另外,在结果上调用GetType以查看实际返回的类型,您将看到它不是一个接口。@taquion文章很好,我很久以前就看过了,它并没有真正回答我的问题。但下面的答案是可以的。我建议你这样做。阅读后,我相信您会理解整个内容。另外,在结果上调用GetType以查看实际返回的类型,您将看到它不是一个接口。@taquion文章很好,我很久以前就看过了,它并没有真正回答我的问题。但下面的答案确实如此。