C# IEnumerable接口导致列表出错

C# IEnumerable接口导致列表出错,c#,list,ienumerable,C#,List,Ienumerable,我应该调整我的InvItems类以使用IEnumerable接口,但不使用IEnumerable接口。然而,当我调整类时,我的列表会弹出错误,我不明白为什么 错误是: “找不到类型或命名空间。” 我想我必须转换列表,但我不太确定如何转换(我只找到了使用IEnumerable界面的说明)。谢谢您的帮助 public class InvItemList : IEnumerable { private List<InvItem> invItems; public InvI

我应该调整我的
InvItems
类以使用
IEnumerable
接口,但不使用
IEnumerable
接口。然而,当我调整类时,我的
列表会弹出错误,我不明白为什么

错误是:

“找不到类型或命名空间。”

我想我必须转换列表,但我不太确定如何转换(我只找到了使用
IEnumerable
界面的说明)。谢谢您的帮助

public class InvItemList : IEnumerable
{
    private List<InvItem> invItems;

    public InvItemList()
    {
        invItems = new List<InvItem>();
    }

    public IEnumerator GetEnumerator()
    {
        foreach (InvItem in invItems)
        {
            yield return frmNewItem;
        }
    }
public类InvItemList:IEnumerable
{
私人名单;
公共受邀者()
{
invItems=新列表();
}
公共IEnumerator GetEnumerator()
{
foreach(InvItem中的InvItem)
{
收益率frmNewItem;
}
}
  • 您必须导入
    System.Collection
    ,以删除找不到命名空间的错误

  • >p>您可能应该考虑使用泛型<代码> iQueaby接口,而不是非泛型<代码> iQueabd

    。 下面是您的代码修复程序,以使其能够编译:

    public class InvItemList : IEnumerable
    {
        private List<InvItem> invItems;
    
        public InvItemList()
        {
            invItems = new List<InvItem>();
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return invItems.GetEnumerator();
        }
    }
    

    您需要更正一些错误:

    加:

    更正“foreach”语句:

    foreach (InvItem frmNewItem in invItems)
    
    所以它看起来是这样的:

    using System.Collections;
    
    public class InvItem
    {
    }
    
    public class InvItemList : IEnumerable
    {
        private List<InvItem> invItems;
    
        public InvItemList()
        {
            invItems = new List<InvItem>();
        }
    
        public IEnumerator GetEnumerator()
        {
            foreach (InvItem frmNewItem in invItems)
            {
                yield return frmNewItem;
            }
        }
    }
    
    使用系统集合;
    公开课
    {
    }
    公共类InvItemList:IEnumerable
    {
    私人名单;
    公共受邀者()
    {
    invItems=新列表();
    }
    公共IEnumerator GetEnumerator()
    {
    foreach(InvItem frmNewItem in invItems)
    {
    收益率frmNewItem;
    }
    }
    }
    
    IEnumerable
    的命名空间是
    System.Collections
    ,而
    IEnumerable
    的命名空间是
    System.Collections.Generic


    确保引用的是正确的。

    如果我同时使用System.Collections和System.Collections.Generic,然后在使用

    public class InvItemList : System.Collections.IEnumerable
    

    错误解决。

    1.什么异常2.什么是
    frmNewItem
    ?什么是
    frmNewItem
    ?使用类的表单。我有一个InvItem类、InvItemList类和一个新的项目表单。@MarcinJuraszek感谢添加转义字符。嗯,这也是我的想法;我是否使用了您可以看到的错误的表单?使用系统;使用System.Collections;使用System.Linq;使用System.Text;使用System.Threading.Tasks;命名空间清单维护{public class InvItemList:IEnumerable{private List invItems;public InvItemList(){invItems=new List();如果要使用
    列表
    ,则必须添加命名空间引用
    System.Collection.Generic
    。因此正确的引用顺序可能是:
    使用System;使用System.Collections;使用System.Collections.Generic;使用System.Linq;使用System.Text;使用System.Threading.Tasks;
    或者您可以在中定义InvestMList这样:
    public class InvItemList:System.Collections.IEnumerable
    那么就永远不会有任何错误引用。啊哈,如果我同时输入System.Collections和System.Collections.Generic,然后定义我在类中使用的IEnumerable,这就解决了错误!非常感谢!使用您的foreach,我得到了一个“检测不到的代码”错误。我的InvItem类是公共的;研究它,错误似乎是指循环错误地中断。但这怎么可能?它在哪一行显示错误?如果您逐字复制上述代码,我怀疑foreach中没有。尽管现在的类不是很有用。您正在创建一个空列表实例作为私有成员字段,并且没有向其中添加任何项的代码。
    using System.Collections;
    
    public class InvItem
    {
    }
    
    public class InvItemList : IEnumerable
    {
        private List<InvItem> invItems;
    
        public InvItemList()
        {
            invItems = new List<InvItem>();
        }
    
        public IEnumerator GetEnumerator()
        {
            foreach (InvItem frmNewItem in invItems)
            {
                yield return frmNewItem;
            }
        }
    }
    
    public class InvItemList : System.Collections.IEnumerable