如何在 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
转换为 string
。 ArrayList
中的所有项在编译时都是 object
,并且 object
没有名为 StartsWith
.
的方法
在这种情况下:
foreach (string item in list)
item
从 object
.
转换为 string
要执行相同的操作,您需要自己执行转换,例如
Parallel.ForEach(list.OfType<string>().ToArray(), item ....
或者 .Cast<string>
而不是 OfType
如果你想在运行时失败,如果你的 list
.
中有一个非字符串实例
或者使用通用列表,例如 List<String>
以避免运行时转换。
我有一个 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
转换为 string
。 ArrayList
中的所有项在编译时都是 object
,并且 object
没有名为 StartsWith
.
在这种情况下:
foreach (string item in list)
item
从 object
.
string
要执行相同的操作,您需要自己执行转换,例如
Parallel.ForEach(list.OfType<string>().ToArray(), item ....
或者 .Cast<string>
而不是 OfType
如果你想在运行时失败,如果你的 list
.
或者使用通用列表,例如 List<String>
以避免运行时转换。