将 ArrayList 作为 IEnumerable 传递给方法

Passing ArrayList as IEnumerable to a method

我有一个数组列表如下;

ArrayList myArrayList = new ArrayList();

for (int i = 0; i <= 1000; i++)
{
    myArrayList.Add(i.ToString());
}

然后我正在使用 IEnumerator 并尝试将值传递给函数。

IEnumerator eee = myArrayList.GetEnumerator();

正在调用函数。

iteratefrom5to10(eee); //The error shown here is some invalid arguments.

static void iteratefrom5to10(IEnumerator<int> ien)
{
    while (ien.MoveNext())
    {
        MessageBox.Show(ien.Current.ToString());
    }
}

上述方法适用于 List。但不适用于 ArrayList。怎么了?

您需要像这样将 myArrayList 转换为 IEnumerable<int>

IEnumerator<int> eee = myArrayList.Cast<int>().GetEnumerator();

请注意,您正在向 ArrayList 添加字符串。您应该像这样添加整数:

ArrayList myArrayList = new ArrayList();

for (int i = 0; i <= 1000; i++)
{
    myArrayList.Add(i);
}

你可以这样做:

myArrayList.ToArray().AsEnumerable();

停止使用 ArrayList - 在极少数情况下您会想要使用它。

由于您使用的是整数列表,因此只需使用 List<int> 即可 - 无需将所有值转换为字符串并返回 :)

最后,你为什么要使用 GetEnumerator?将参数更改为 IEnumerable<int> 并将 while 更改为 foreach:

var list = new List<int>();

for (var i = 0; i <= 1000; i++)
{
  list.Add(i);
}

static void iteratefrom5to10(IEnumerable<int> ien)
{
  foreach (var value in ien)
  {
    MessageBox.Show(value.ToString());
  }
}

IEnumerable 非常易于使用。例如,正如您的方法名称所暗示的那样,您想要从 5 迭代到 10,同样可以使用简单的 list.Skip(4).Take(6).

来完成