[英]Is there a way to add an Extension Method to a Lambda?
在此示例中,我想向方法中添加.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,500, () => {...code...});
但理想情況下,我想做的是:
()=> { ...code...}.loop(10,500);
除非我這樣做,否則這是行不通的:
new MethodInvoker(()=>{...code...}).loop(10,500);
可以使用此版本的擴展方法:
public static void loop(this MethodInvoker methodInvoker, int count, int delay)
{
for(int i=0; i < count; i++)
{
methodInvoker();
Processes.Sleep(delay);
}
}
不,很遺憾沒有。
我很早以前就寫過博客了 :(
但是,通過正確選擇縮進,您可以使其看起來與普通循環幾乎相同:
HelperType.Loop(count, 500, () =>
{
// Code here
});
那就是許多Parallel Extensions示例的樣子
我不會將其擴展為您實際上不打算使用的東西的擴展方法,只是為了您可以使用“ this”而不是實類型名稱...除非您對該對象有真正的用途無論如何,它被稱為“開”。
(我還建議您遵循.NET命名約定-使您的方法使用PascalCase。)
我真的建議不要嘗試這樣做。
在我看來,在核心類型(例如委托/ lambda類型或System.Object)上實現擴展方法通常不是一個好主意。
這只會引起混亂。 我對您建議的語法沒有什么好處:
() => { ..code... }.Loop(10, 500);
對我來說,它遠不如:
Utilities.RepeatWithDelay(10, 500, () => {....code... } );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.