C# 什么是=>;此代码中的运算符

C# 什么是=>;此代码中的运算符,c#,operators,C#,Operators,我使用的线程池代码如下:- ThreadPool.QueueUserWorkItem (o => MyFunction() ); 我不确定o=>在这段代码中做了什么。有人能帮我吗。它描述了一个lambda(匿名)函数。在本例中,它是一个接受一个参数o的函数,然后执行MyFunction(尽管在本例中,它基本上是丢弃o的值)。这相当于: void Foo(object o) //We know

我使用的线程池代码如下:-

ThreadPool.QueueUserWorkItem
                (o =>
                MyFunction()
                );
我不确定
o=>
在这段代码中做了什么。有人能帮我吗。

它描述了一个lambda(匿名)函数。在本例中,它是一个接受一个参数o的函数,然后执行MyFunction(尽管在本例中,它基本上是丢弃o的值)。这相当于:

void Foo(object o) //We know that Foo takes an object and returns void because QueueUserWorkItem expects an instance of type WaitCallback which is a delegate that takes and object and returns void
{
  MyFunction();
}

ThreadPool.QueueUserWorkItem(Foo) // or ThreadPool.QueueUserWorkItem(new WaitCallback(Foo));
ThreadPool.QueueUserWorkItem(MyFunction);
o的类型是根据QueueUserWorkItem所期望的内容推断出来的。QueueUserWorkItem需要WaitCallback类型,因此在本例中o应为object类型,因为WaitCallback是具有返回void的object类型参数的方法的委托

至于这个特定代码片段的含义;您基本上是将一个函数(工作项)添加到队列中,该队列将由池中的一个线程执行(当可用时)。这个特定的代码片段只是描述了一种很好的、简洁的方法来传递函数,而不必经历完全定义类方法的麻烦


顺便说一句,我和其他人倾向于将=>解读为“那样”。有些人把它读作“转到”。

它声明了一个匿名方法。基本上,您正在将一个方法作为参数传递给QueueUserWorkItem方法,该方法的主体是
{MyFunction();}
。我没有检查过,但它也应该相当于:

void Foo(object o) //We know that Foo takes an object and returns void because QueueUserWorkItem expects an instance of type WaitCallback which is a delegate that takes and object and returns void
{
  MyFunction();
}

ThreadPool.QueueUserWorkItem(Foo) // or ThreadPool.QueueUserWorkItem(new WaitCallback(Foo));
ThreadPool.QueueUserWorkItem(MyFunction);
这是lambda表达式的C#语法

它在许多方面都是一个内联委托定义。这样就省去了定义用作委托目标的额外函数的繁琐工作

private object Target(object state) {
  MyFunction();
}

...
ThreadPool.QueueUserWorkItem(new WaitCallback(Target));

不完全是,我不认为。QueueUserWorkItem需要一个接受一个对象作为参数的委托;因此,将
MyFunction
包装在lambda中。只是澄清一下,=>是运算符,o是传入的参数。请看一眼以了解更多细节。@lzcd:我不会称之为接线员。这只是将参数与lambda主体分开的语法。如果我理解正确,那么如果我想将一些参数传递给我的函数,那么我可以这样做:-ThreadPool.QueueUserWorkItem(o=>MyFunction(o));我想你是说
()=>MyFunction()
,这是一个没有parameter@MystereMan QueueUserWorkItem需要WaitCallback的一个实例,它是接受和对象并返回void的方法的委托。因此,虽然奇怪,但签名是正确的。