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.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |