C# 实现IEnumerable接口
我知道IEnumerable是一个接口,我还知道当一个类实现一个接口时,它必须为该接口中的方法实现特定的主体。我最近一直在写一个程序,我觉得我需要将Ienumerable实现到我的一个类中,以便在foreach循环中使用它。在我这样做之后,就是这样做的:C# 实现IEnumerable接口,c#,interface,C#,Interface,我知道IEnumerable是一个接口,我还知道当一个类实现一个接口时,它必须为该接口中的方法实现特定的主体。我最近一直在写一个程序,我觉得我需要将Ienumerable实现到我的一个类中,以便在foreach循环中使用它。在我这样做之后,就是这样做的: class FData: IEnumerable<EClass> { // Removed the irrelevant contents public IEnumerator<EnumerableClass
class FData: IEnumerable<EClass> {
// Removed the irrelevant contents
public IEnumerator<EnumerableClass> GetEnumerator()
{
for (int i = 0; i < Emp_Id.Count; i++) {
yield return (new EnumerableClass { Emp_Id = Emp_Id[i], Salary = Salary[i] });
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
class-FData:IEnumerable{
//删除不相关的内容
公共IEnumerator GetEnumerator()
{
对于(int i=0;i
我发现我的FData类可以像列表一样使用,就好像它继承了所有可枚举的方法,比如Select()、all()、Any()等等
我想知道,如果接口中没有定义这些方法的行为,那么这种情况到底是如何发生的?所有这些方法都是实现
IEnumerable
接口的类型的extension
方法。因此,一旦一个类型实现了IEnumerable
的as方法,那么这些方法也会出现——除了已经在类型主体中定义的方法之外
有关更多文档,请查看。另外,如果您以前没有听说过扩展方法,请先看一看。它们是扩展方法,下面是一些详细信息 扩展方法作为静态方法存在于某些名称空间中的静态类中,该方法的第一个参数包括
this
关键字(请参见下面的of type
的示例方法签名)。在这种情况下,您可能会看到。如果要从类文件中删除使用System.Linq的命名空间,则这些扩展方法将不再可用。像Resharper这样的售后重构工具会在适当的情况下建议使用扩展方法,但在VisualStudio中开箱即用的工具不会建议使用扩展方法(例如Ctrl+)。因此,如果需要它们,必须确保在类文件的顶部使用
语句添加适当的。如果您不需要它们,也不需要命名空间中的任何其他类,则可以将其删除,扩展方法将不再可用
public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);
类型的公共静态IEnumerable(此IEnumerable源);
这样做的好处是,只要包含扩展方法的名称空间,任何实现IEnumerable
的方法都将具有of type
方法。你也可以自己制作扩展方法。这里没有扩展方法。@JonHanna你的意思是什么?我的意思是,你的回答谈到了扩展方法,并链接到了扩展方法的描述,但它们与问题无关。我完全理解那里发生了什么,非常感谢你的回答。是的,当我得了流感时,我不应该费心去看这个网站。我现在要读一些网络漫画:)