gpt4 book ai didi

c# - 有没有办法向 Lambda 添加扩展方法?

转载 作者:行者123 更新时间:2023-11-30 14:19:46 25 4
gpt4 key购买 nike

在这个例子中我想添加一个.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);
}
}

最佳答案

不,不幸的是没有。

blogged about this很久以前:(

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

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

这就是许多并行扩展示例的样子

不会使它成为你实际上不会使用的东西的扩展方法,只是为了你可以使用“this”而不是真正的类型名称......除非无论如何,你已经对它称为“on”的对象有了真正的用途。

(我还建议遵循 .NET 命名约定 - 让您的方法采用 PascalCase。)

关于c# - 有没有办法向 Lambda 添加扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2248506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com