如何在不使用lambda表达式的情况下完成Parallel.ForEach循环?

时间:2016-09-03 10:44:32

标签: c# lambda delegates

试着理解在没有lambda表达式的情况下使用C#中的委托是什么样的。我理解他们的功能,但他们的语法仍然模糊。如果不使用=>这段代码会是什么样子? lambda快捷方式?

//pictureList is a string array of C:\Pictures\pic_1 through 10.jpeg file paths
Parallel.ForEach(pictureList, currentPic =>
 {
    string picName = Path.GetFileName(currentPic);
    using (Bitmap bitmap = new Bitmap(currentPic))
    {
         bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
         bitmap.Save(Path.Combine(newDir, picName));
    }
 }
);

1 个答案:

答案 0 :(得分:3)

Lambda不是“快捷方式”,它是一种生成委托对象“内联”的方法(即没有定义单独的方法)。

您可以使用旧的方式生成委托内联(即匿名方法),例如

Parallel.ForEach(pictureList, delegate(Image currentPic) {
    ...
});

或为它定义一个单独的方法,如下所示:

Parallel.ForEach(pictureList, ProcessPicture);
...
static void ProcessPicture(Image currentPic) {
    ...
}