C# 不使用'实现IEnumerator;收益率回报率';

C# 不使用'实现IEnumerator;收益率回报率';,c#,ienumerable,yield-return,ienumerator,C#,Ienumerable,Yield Return,Ienumerator,我正在学习C#中的迭代器概念,并在试验代码,处理简单的问题,并尝试以不同的方式实现。我试图在一个列表中显示所有术语,为此我尝试了不同的方法来获得结果。在下面的代码中,我使用了两个类ListIterator和ImplementList 在ListIterator类中:我定义了一个HashSet,它使用IEnumerator存储值。这里GetEnumerator()方法返回列表中的值。GetEnumerator在ImplementList类(其他类)中实现。最后,该列表显示在控制台中 public

我正在学习C#中的迭代器概念,并在试验代码,处理简单的问题,并尝试以不同的方式实现。我试图在一个列表中显示所有术语,为此我尝试了不同的方法来获得结果。在下面的代码中,我使用了两个类ListIterator和ImplementList

在ListIterator类中:我定义了一个HashSet,它使用IEnumerator存储值。这里GetEnumerator()方法返回列表中的值。GetEnumerator在ImplementList类(其他类)中实现。最后,该列表显示在控制台中

public class ListIterator
{ 
   public void DisplayList()
   {
    HashSet<int> myhashSet = new HashSet<int> { 30, 4, 27, 35, 96, 34};
    IEnumerator<int> IE = myhashSet.GetEnumerator();
    while (IE.MoveNext())
      {
        int x = IE.Current;
        Console.Write("{0} ", x);
      }
      Console.WriteLine();
    Console.ReadKey();
   }
}
公共类ListIterator
{ 
公共void显示列表()
{
HashSet myhashSet=新的HashSet{30,4,27,35,96,34};
IEnumerator IE=myhashSet.GetEnumerator();
while(即MoveNext())
{
int x=即电流;
Console.Write(“{0}”,x);
}
Console.WriteLine();
Console.ReadKey();
}
}
在ImplementList类中:定义了GetEnumerator(),它使用yield return x返回列表

public class ImplementList : IList<int>
  {
    private List<int> Mylist = new List<int>();
    public ImplementList() { }

    public void Add(int item) 
    { 
        Mylist.Add(item); 
    }

    public IEnumerator<int> GetEnumerator()
    {
      foreach (int x in Mylist)
        yield return x;
    }
  }
公共类实现列表:IList
{
私有列表Mylist=新列表();
公共实现列表(){}
公共无效添加(整数项)
{ 
Mylist.Add(项目);
}
公共IEnumerator GetEnumerator()
{
foreach(Mylist中的int x)
收益率x;
}
}

现在,我想重写GetEnumerator(),而不使用yield return。它应该返回列表中的所有值。是否可以在不使用IEnumerator中的yield return的情况下获取列表中的所有值

您可以使用内部列表的枚举器实现
MyList

    public IEnumerator<int> GetEnumerator()
    {
      return MyList.GetEnumerator();
    }
public IEnumerator GetEnumerator()
{
返回MyList.GetEnumerator();
}
或者您可以自己实现IEnumerator(来自MSDN):

公共类人员:IEnumerable
{
私人【】人;
公众人士(人[]帕雷)
{
_people=新人[pArray.Length];
对于(int i=0;i
您可以使用内部列表的枚举器实现
MyList

    public IEnumerator<int> GetEnumerator()
    {
      return MyList.GetEnumerator();
    }
public IEnumerator GetEnumerator()
{
返回MyList.GetEnumerator();
}
或者您可以自己实现IEnumerator(来自MSDN):

公共类人员:IEnumerable
{
私人【】人;
公众人士(人[]帕雷)
{
_people=新人[pArray.Length];
对于(int i=0;i
这将以数组形式返回结果

return MyList.ToArray();
或者,如果您想将其作为列表返回,为什么不

return MyList;

这将以数组的形式返回结果

return MyList.ToArray();
或者,如果您想将其作为列表返回,为什么不

return MyList;

它说不能显式地将类型列表转换为IEnumerator为什么要在类中实现列表,而列表本身已经实现了它?我只是在试验收益率返回。我希望GetEnumerator在不使用yield returnYep的情况下显示列表中的所有值,现在我又读了一遍您的问题,我看到您说您只是在试验:)return MyList.GetEnumerator();var a=new MyList().GetEnumerator();虽然(a.MoveNext()){Console.WriteLine(a.Current);}它说不能显式地将类型列表转换为IEnumerator,为什么要在类中实现列表,而列表本身已经实现了呢?我只是在试验收益率返回。我希望GetEnumerator在不使用yield returnYep的情况下显示列表中的所有值,现在我又读了一遍您的问题,我看到您说您只是在试验:)return MyList.GetEnumerator();var a=new MyList().GetEnumerator();while(a.MoveNext()){