将ArrayList作为IEnumerable传递给方法

时间:2015-11-02 13:19:43

标签: c# ienumerable

我有一个数组列表如下;

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。有什么问题?

3 个答案:

答案 0 :(得分:3)

停止使用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)进行相同操作。

答案 1 :(得分:1)

您需要将[Test] public void FileToEmailClient() { string testDataFilePath = @"..\..\Data\test.txt"; Assert.That(File.Exists(testDataFilePath), Is.True); string subject = String.Format("File {0} attached", Path.GetFileName(testDataFilePath)); string body = "body"; string command = String.Format("mailto:?subject={0}&body={1}&attachment=\"{2}\"", subject, body, testDataFilePath); Process.Start(command); } 投射到myArrayList,如下所示:

IEnumerable<int>

请注意,您要向IEnumerator<int> eee = myArrayList.Cast<int>().GetEnumerator(); 添加字符串。你应该像这样添加整数:

ArrayList

答案 2 :(得分:0)

你可以这样做:

myArrayList.ToArray().AsEnumerable();