加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:34:15 所属栏目:百科 来源:网络整理
导读:在这个例子中,我想在方法中添加.loop({quantity},{sleepvalue}) 我得到了这个: this.loop(count,500,()={ var image = Screenshots.getScreenshotOfDesktop(); pictureBox.load(image); images.Add(image); updateTrackBar(); }); 使用此扩展方法: public
在这个例子中,我想在方法中添加.loop({quantity},{sleepvalue})

我得到了这个:

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

使用此扩展方法:

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

这意味着调用语法是:

this.loop(15,() => {...code...});

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

()=> { ...code...}.loop(10,500);

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

new MethodInvoker(()=>{...code...}).loop(10,500);

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

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

解决方法

不,不幸的是没有.

我blogged about this很久以前:(

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

HelperType.Loop(count,() =>
{
   // Code here
});

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读