实现IEnumerable <interface> Generic </interface>

时间:2014-08-04 19:31:21

标签: c# .net ienumerable

我是c#的新手并且已经阅读了关于这个话题的主题,但我仍然遇到了麻烦。提前感谢您的建议和意见。

从顶层开始,我正在实现一个包含方法

的界面
IEnumerable<Iinterfacetype> methodname(inputtype input)

在这种情况下,我似乎应该返回IEnumerable<Iinterfacetype>类型的对象。为此,我尝试创建一个实现IEnumerable<Iinterfacetype>的新脚本。到目前为止我的脚本看起来像这样:

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace Project3.SimulatedTools.DBImplementations
{
    class Enumerable : IEnumerable<interfacetype>
    {
        List<interfacetype> mylist = new List<interfacetype>();

        public IEnumerator<interfacetype> GetEnumerator()
        {
            return mylist.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator();
        }
    }
}

我有另一个名为interfacetype.cs的脚本,它实现了Iinterfacetype。

在最初的顶层,我已经设置了它:

public IEnumerable<Iinterfacetype> methodname(inputtype input) 
{
    Enumberable<interfacetype> tempnamehere = new Enumerable();
    return(tempnamehere);
}

然而,我一直收到错误:

  

无法将类型“Project3.SimulatedTools.DBImplementations.Enumerable”隐式转换为System.Collections.Generic.IEnumerable<Iinterfacetype>'。存在显式转换(您是否错过了演员?)

如何解释此错误?我是否正确设置了IEnumerable<interfacetype>的实施?当interfacetype实现Iinterfacetype?

时,为什么我不能返回类型IEnumerable<interfacetype>

编辑: 我的顶级现在看起来像这样,我调整了我的类Enumerable来实现IEnumerable而不是更改所有对to的引用。我不再遇到任何编译错误,但我仍然不明白原始问题是什么,并且尚未将其设置为运行。

public IEnumerable<Iinterfacetype> methodname(inputtype input) 
{
    Enumberable tempnamehere = new Enumerable();
    return(tempnamehere);
}

此外,我是否有必要使用interfacetype:Iinterfacetype,因为我现在已经设置了它?看起来我从来没有真正使用interfacetype,在这种情况下,它将是无关紧要的。如果是这样,为什么会这样(我不必实现它)?

2 个答案:

答案 0 :(得分:2)

让我们看看IEnumerable<T>

的定义
  

公开枚举器,它支持对指定类型

的集合进行简单迭代

基本上,任何实现IEnumerable的类型都可以让我们迭代给定的集合。

.NET Framework中有一些实现接口的类型:

List<T>Dictionary<TKey, TValue>

您可以使用BCL(基类库)提供的类型而不是自己实现IEnumerable<T>,而只需使用实现它的对象。 在您的情况下,List<interfacetype>就足够了:

public IEnumerable<Iinterfacetype> methodname(inputtype input) 
{
    return new List<interfacetype>();
}

答案 1 :(得分:1)

你真的永远不会创建一个&#34;新的Enumerable&#34;而是你创造了一些暗示IEnumerable的东西。最明显的例子是:

var l = new List<string>();

这实现了IEnumerable<string>;