C# 如何对动态对象使用Parallel.ForEach方法

C# 如何对动态对象使用Parallel.ForEach方法,c#,.net-4.0,parallel-processing,parallel.foreach,dynamicobject,C#,.net 4.0,Parallel Processing,Parallel.foreach,Dynamicobject,我曾经使用Parallel.ForEach功能beafore同时处理多个客户端,如下所示: Clients objClient = new Clients(); List<Clients> objClientList = Clients.GetClientList(); Parallel.ForEach<Clients>(objClientList, list => { SendFilesToClient(list); }); var xDoc = XD

我曾经使用Parallel.ForEach功能beafore同时处理多个客户端,如下所示:

Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();

Parallel.ForEach<Clients>(objClientList, list =>
{
    SendFilesToClient(list);
});
var xDoc = XDocument.Load(new StreamReader(xmlPath + @"\client.xml"));
dynamic root = new ExpandoObject();

XmlToDynamic.Parse(root, xDoc.Elements().First());

dynamic clients = new List<dynamic>();

for (int i = 0; i < root.clients.client.Count; i++)
{
    clients.Add(new ExpandoObject());
    clients[i].Id = root.clients.client[i].id;
    clients[i].Name = root.clients.client[i].name;
    List<string> list = new List<string>();
    for (int j = 0; j < root.clients.client[i].emails.email.Count; j++)
    {
        list.Add(root.clients.client[i].emails.email[j].ToString());
    }
    clients[i].Email = string.Join(",", list);
}
Clients objClient=newclients();
List objClientList=Clients.GetClientList();
Parallel.ForEach(objClientList,list=>
{
SendFilesToClient(列表);
});
但是现在,我决定动态创建clients对象,而不是创建Client类,如下所示:

Clients objClient = new Clients();
List<Clients> objClientList = Clients.GetClientList();

Parallel.ForEach<Clients>(objClientList, list =>
{
    SendFilesToClient(list);
});
var xDoc = XDocument.Load(new StreamReader(xmlPath + @"\client.xml"));
dynamic root = new ExpandoObject();

XmlToDynamic.Parse(root, xDoc.Elements().First());

dynamic clients = new List<dynamic>();

for (int i = 0; i < root.clients.client.Count; i++)
{
    clients.Add(new ExpandoObject());
    clients[i].Id = root.clients.client[i].id;
    clients[i].Name = root.clients.client[i].name;
    List<string> list = new List<string>();
    for (int j = 0; j < root.clients.client[i].emails.email.Count; j++)
    {
        list.Add(root.clients.client[i].emails.email[j].ToString());
    }
    clients[i].Email = string.Join(",", list);
}
var xDoc=XDocument.Load(新的StreamReader(xmlPath+@“\client.xml”);
动态根=新的ExpandooObject();
Parse(root,xDoc.Elements().First());
动态客户端=新列表();
for(int i=0;i
既然我不使用客户机类并动态生成对象,那么如何使用Parallel.ForEach功能在动态对象中并发处理多个客户机,就像我在使用类对象之前所做的那样

希望我说清楚

此外,如果您能告诉我我的方法是否有问题,或者告诉我更好的方法,我将不胜感激

既然我不使用客户机类并动态生成对象,那么如何使用Parallel.ForEach功能在动态对象中并发处理多个客户机,就像我在使用类对象之前所做的那样

首先,将列表保留为
列表
,不要将其声明为
动态

List<dynamic> clients = new List<dynamic>();
如果必须将
客户端
声明为
动态客户端
,则可以使用:

Parallel.ForEach((IEnumerable<dynamic>)clients, client =>
{
   //...
Parallel.ForEach((IEnumerable)客户端,客户端=>
{
//...

这是我尝试的第一件事,但我得到了这样一条消息:如果不先将lambda表达式强制转换为委托或表达式树类型,就不能将它用作动态调度对象的参数。@学习者-发布您尝试的确切代码,以及确切的错误消息。@Learner您不能使列表本身成为动态的-它必须是实现
IEnumerable
以使其工作(或强制转换)。再次感谢您为动态类型提供解决方案。