gpt4 book ai didi

c# - 将委托(delegate)与参数一起传递给函数

转载 作者:行者123 更新时间:2023-12-02 20:35:55 25 4
gpt4 key购买 nike

我想要将任务列表排入队列,然后执行特定事件。代码:

internal class MyClass
{
private Queue<Task> m_taskQueue;

protected MyClass()
{
m_taskQueue = new Queue<Task>();
}

public delegate bool Task(object[] args);

public void EnqueueTask(Task task)
{
m_taskQueue.Enqueue(task);
}

public virtual bool Save()
{
// save by processing work queue
while (m_taskQueue.Count > 0)
{
var task = m_taskQueue.Dequeue();
var workItemResult = task.Invoke();

if (!workItemResult)
{
// give up on a failure
m_taskQueue.Clear();
return false;
}
}
return true;
}
}

每个委托(delegate)任务可能有自己的参数列表:Task(object[] args)。我的问题是如何将参数传递给任务队列的每个任务?

最佳答案

好的,现在我们有了更多信息,听起来像您的 EnqueueTask方法实际上应该如下所示:

public void EnqueueTask(Task task, object[] values)

对吗?

对于初学者,我会避免使用名称 Task ,它已经是 .NET 4 核心的一部分,并将在 .NET 5 中变得非常突出。正如 Joshua 所说,您基本上已经得到了 Func<object[], bool> .

接下来,您可以保留两个列表 - 一个用于委托(delegate),另一个用于值,但仅保留 Queue<Func<bool>> 会更容易。像这样:

private readonly Queue<Func<bool>> taskQueue = new Queue<Func<bool>>();


public void EnqueueTask(Task task, object[] values)
{
taskQueue.Enqueue(() => task(values));
}

然后你的代码的其余部分将真正“按原样”工作。那里的 lambda 表达式将捕获 valuestask ,所以当您调用 Func<bool> 时,它将把这些值提供给原始委托(delegate)。

关于c# - 将委托(delegate)与参数一起传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236200/

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