C# 为什么Enumerable不从IEnumerable继承
我对这个问题非常困惑,无法理解。在可列举的文档中,我阅读了以下内容: 实现System.Collections.Generic.IEnumerable的 还有一些方法,如Select return IEnumerable,我们可以在使用该方法后从其他方法(如Where)中使用。例如:C# 为什么Enumerable不从IEnumerable继承,c#,linq,ienumerable,enumerable,C#,Linq,Ienumerable,Enumerable,我对这个问题非常困惑,无法理解。在可列举的文档中,我阅读了以下内容: 实现System.Collections.Generic.IEnumerable的 还有一些方法,如Select return IEnumerable,我们可以在使用该方法后从其他方法(如Where)中使用。例如: names.Select(name => name).Where(name => name.Length > 3 ); 但Enumerable不从IEnumerable继承,并且IEnumera
names.Select(name => name).Where(name => name.Length > 3 );
但Enumerable不从IEnumerable继承,并且IEnumerable也不包含Select、Where等
我错了吗?
或者存在任何原因?选择、位置等。它们需要在别处定义,因为接口不能提供方法的实现
您可以通过参数列表中的关键字this来识别扩展方法。例如:
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
可以将其用作IEnumerable上的一个方法,只有一个参数:Func谓词。我说过你也阅读了Jon Skeet的这篇文章,以获得进一步的见解。正确。但是这句话呢 实现System.Collections.Generic.IEnumerable的 根据这句话,我们必须在IEnumerable接口中定义方法,并通过继承在Enumerable类中实现。正确吗
为什么首选扩展方法反对继承?IEnumerable出现在IEnumerable之前,IEnumerable是一个2.0+接口。为什么首选扩展方法反对继承
Enumerable是一个静态类,它实现了IEnumerable的50多个扩展方法。这使您可以在实现IEnumerable的类型上使用所有这些扩展方法,而无需强制程序员为每个集合类型实现所有这些方法。如果Enumerable是一个接口而不是一个静态类,则每个集合类型(如List、Dictionary、Set等)都有自己的这些扩展方法的实现。解决此问题的方法是使用Cast方法将元素强制转换为其相同的类型,该方法返回相同元素的IEnumerable版本
DataTable dt = ...
dt.Rows.Cast<DataRow>().Where()...
行的类型为IEnumerable,强制转换后它将变为IEnumerable类型,这是由LINQ扩展方法支持的。这是关于扩展方法的,而不是关于迭代器块,您应该添加注释或编辑问题,而不是创建新答案来添加新信息或问题。