簡體   English   中英

有沒有一種方法可以將擴展方法添加到Lambda?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM