我有一个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()
扩展方法。怎么解决?
答案 0 :(得分:7)
这是因为foreach
正在将ArrayList
中的项目从string
转换为object
。 ArrayList
中的所有项目在编译时都为object
,object
没有名为StartsWith
的方法。
在这种情况下:
foreach (string item in list)
item
已从string
转换为object
。
要做同样的事情,你需要自己进行转换,例如
Parallel.ForEach(list.OfType<string>().ToArray(), item ....
如果您想在运行时失败,如果.Cast<string>
中存在非字符串实例,请 OfType
而不是list
。
或者使用诸如List<String>
之类的通用列表来避免运行时转换。