我正在尝试编写调用Parallel.ForEach的动态方法。我检查了示例类的IL,并注意到生成了一个名为 c__DisplayClass#的嵌套类型。我确实设法创建了Parallel.ForEach的动态实现,但是我的嵌套类是普通类型。它没有命名为 c __....而且我认为,由于在Reflector中检查生成的代码时,生成的代码看起来有些不同:private void SayHello(string name){ SayHelloInvoker invoker = new SayHelloInvoker(name); Parallel.ForEach<ITest>(this, new Action<ITest>(invoker.SayHello));}但是在Reflector中检查的编译代码如下:private void SayHello(string name){ Parallel.ForEach<ITest>(this, delegate (ITest x) { x.SayHello(name)); });}当前的实现工作正常,但我仍然想弄清楚生成嵌套类型为 c __....的地方。因此,如果有人能以正确的方式指出我,请我满足我的好奇心,请。 :) 最佳答案 当您创建一个使用父方法中的变量的匿名方法时,C#编译器会生成一个名为<>c_...的闭包类来共享这些变量。有关更多信息,请see my blog post。如果动态生成方法,则可以执行任何操作以确保该方法可以访问所需的变量。就您而言,您的SayHelloInvoker(大概)起着与生成的闭包类型相同的作用,但名称更具可读性,就像我的previous closure-less example中的GreaterThan类一样。关于c# - 反射,发射和并行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8242674/
10-15 10:42