为什么Enumerable不从IEnumerable <T>继承

Nov*_*ice 3 c# linq ienumerable enumerable

我对此问题非常困惑,无法理解.在Enumerable文档中,我读到了这个:

实现System.Collections.Generic.IEnumerable

还有一些像Select()return IEnumerable<TSource>这样的方法我们可以Where()在使用之后使用其他方法.例如:

names.Select(name => name).Where(name => name.Length > 3 );
Run Code Online (Sandbox Code Playgroud)

Enumerable不从继承IEnumerable<T>IEnumerable<T>不包含Select(),Where()以及等太...

我错了吗?
或存在任何理由?

Han*_*ing 8

Select(),Where()等是" 扩展方法 ".它们需要在"其他地方"定义,因为接口不能提供方法的实现.

您可以通过参数列表中的关键字"this"识别扩展方法.例如:

public static IEnumerable<TSource> Where<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, bool> predicate
)
Run Code Online (Sandbox Code Playgroud)

可以使用,就好像它是一个IEnumerable<TSource>带有一个参数的方法:Func<TSource, bool> predicate.