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

时间:2016-11-20 22:38:20

标签: c# .net multithreading foreach .net-framework-version

我有一个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()扩展方法。怎么解决?

1 个答案:

答案 0 :(得分:7)

这是因为foreach正在将ArrayList中的项目从string转换为objectArrayList中的所有项目在编译时都为objectobject没有名为StartsWith的方法。

在这种情况下:

foreach (string item in list)

item已从string转换为object

要做同样的事情,你需要自己进行转换,例如

Parallel.ForEach(list.OfType<string>().ToArray(), item ....
如果您想在运行时失败,如果.Cast<string>中存在非字符串实例,请

OfType而不是list

或者使用诸如List<String>之类的通用列表来避免运行时转换。