Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实现IEnumerable接口_C#_Interface - Fatal编程技术网

C# 实现IEnumerable接口

C# 实现IEnumerable接口,c#,interface,C#,Interface,我知道IEnumerable是一个接口,我还知道当一个类实现一个接口时,它必须为该接口中的方法实现特定的主体。我最近一直在写一个程序,我觉得我需要将Ienumerable实现到我的一个类中,以便在foreach循环中使用它。在我这样做之后,就是这样做的: class FData: IEnumerable<EClass> { // Removed the irrelevant contents public IEnumerator<EnumerableClass

我知道IEnumerable是一个接口,我还知道当一个类实现一个接口时,它必须为该接口中的方法实现特定的主体。我最近一直在写一个程序,我觉得我需要将Ienumerable实现到我的一个类中,以便在foreach循环中使用它。在我这样做之后,就是这样做的:

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你的意思是什么?我的意思是,你的回答谈到了扩展方法,并链接到了扩展方法的描述,但它们与问题无关。我完全理解那里发生了什么,非常感谢你的回答。是的,当我得了流感时,我不应该费心去看这个网站。我现在要读一些网络漫画:)