C# 在队列中存储不同的操作(需要澄清)
TLDR;为什么这样做。C# 在队列中存储不同的操作(需要澄清),c#,lambda,queue,C#,Lambda,Queue,TLDR;为什么这样做。 Queue<Action> queue = new Queue<Action>(); queue.Enqueue(() => Load("Scene01")); Queue<Action> queue = new Queue<Action>(); queue.Enqueue(Load("Scene01")); 队列 问题 为什么可以使用lambda表达式传递与操作不匹配的函数 Qu
Queue<Action> queue = new Queue<Action>();
queue.Enqueue(() => Load("Scene01"));
Queue<Action> queue = new Queue<Action>();
queue.Enqueue(Load("Scene01"));
队列
问题
为什么可以使用lambda表达式传递与操作不匹配的函数
Queue<Action> queue = new Queue<Action>();
private void Load() { }
private void Load(string n) { }
private void QueueLoad()
{
// This match action signature.
queue.Enqueue(Load);
// This does not match, nor work.
queue.Enqueue(Load("Scene01"));
// Adding lambda expression and it works. Why?
queue.Enqueue(() => Load("Scene01"));
}
Queue Queue=new Queue();
私有void Load(){}
私有无效加载(字符串n){}
私有void QueueLoad()
{
//此匹配动作签名。
排队。排队(加载);
//这不匹配,也不起作用。
排队(加载(“场景01”);
//添加lambda表达式,它就工作了。为什么?
queue.Enqueue(()=>Load(“Scene01”);
}
这是因为Load
是一个可转换为Action
的操作
queue.Enqueue(() => Load("Scene01"));
queue.Enqueue(Load("Scene01"));
这是因为lambda表达式不带任何参数,也不返回任何内容,因此可以隐式转换为操作
queue.Enqueue(() => Load("Scene01"));
queue.Enqueue(Load("Scene01"));
这不起作用,因为Load(“Scene01”)
是一个方法调用,该方法不返回任何内容,您正在尝试将void
传递到Enqueue
方法。您的第二个代码块不起作用,因为您正在调用Load
方法并返回其结果以存储在队列中。啊,现在我明白了。我注意到将“Load”更改为“Load()”会得到相同的结果。所以我猜lambda确保它是传递的实际函数。非常感谢,伙计,这让我很困惑。非常感谢你的解释。