将 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)
.
来完成
我有一个数组列表如下;
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)
.