如何在 C# 中将 foreach 转换为 Parallel.Foreach

How to convert foreach to Parallel.Foreach in c#

我有一个 foreach 循环,如下所示

ArrayList list;
list = ftp.GetFileList(remotepath<ftp://ftp.getfilelist(remotepath/>);

foreach (string item in list)
{
}

我转换成如下所示的 Parallel.Foreach 运气不好

ArrayList list;
list = ftp.GetFileList(remotepath<ftp://ftp.getfilelist(remotepath/>);

Parallel.ForEach(list.ToArra(), item => 
{
    if (item.StartsWith("GExport_") &&(!item.ToUpper().Contains("DUM")))
    {
    }
}

它抛出错误,如项目不包含 StartsWith() 扩展方法。如何解决?

这是因为 foreach 正在将 ArrayList 中的项目从 object 转换为 stringArrayList 中的所有项在编译时都是 object,并且 object 没有名为 StartsWith.

的方法

在这种情况下:

foreach (string item in list)

itemobject.

转换为 string

要执行相同的操作,您需要自己执行转换,例如

Parallel.ForEach(list.OfType<string>().ToArray(), item ....

或者 .Cast<string> 而不是 OfType 如果你想在运行时失败,如果你的 list.

中有一个非字符串实例

或者使用通用列表,例如 List<String> 以避免运行时转换。