有没有办法将扩展方法添加到Lambda?

Din*_*ruz 3 c# lambda

在这个例子中,我想添加.loop({quantity},{sleepvalue})一个方法

我得到了这个:

this.loop(count, 500,
  ()=>{
   var image = Screenshots.getScreenshotOfDesktop();
   pictureBox.load(image);
   images.Add(image);
   updateTrackBar();
  });
Run Code Online (Sandbox Code Playgroud)

使用此扩展方法:

public static void loop(this Object _object, int count, int delay, MethodInvoker methodInvoker)
  {
   for(int i=0; i < count; i++)
   {
    methodInvoker();
    _object.sleep(delay);
   }
  }
Run Code Online (Sandbox Code Playgroud)

这意味着调用语法是:

this.loop(15,500, () => {...code...});
Run Code Online (Sandbox Code Playgroud)

但理想情况下我想做的是:

()=> { ...code...}.loop(10,500);
Run Code Online (Sandbox Code Playgroud)

哪个不起作用,除非我这样做:

new MethodInvoker(()=>{...code...}).loop(10,500);
Run Code Online (Sandbox Code Playgroud)

这将适用于此版本的扩展方法:

public static void loop(this MethodInvoker methodInvoker, int count, int delay)
  {
   for(int i=0; i < count; i++)
   {
    methodInvoker();
    Processes.Sleep(delay);
   }
  }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

不,不幸的是没有.

我不久前写了这篇博文 :(

但是,通过正确选择缩进,您可以使其看起来几乎与正常循环相同:

HelperType.Loop(count, 500, () =>
{
   // Code here
});
Run Code Online (Sandbox Code Playgroud)

这就是很多Parallel Extensions样本的样子

不会把它作为你实际上不会使用的东西的扩展方法,只是为了你可以使用"this"而不是真正的类型名称...除非你真正使用了对象无论如何,它被称为"开启".

(我还建议遵循.NET命名约定 - 制作方法PascalCase.)