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

时间:2010-06-28 04:57:44

标签: c# operators

我使用的Thread Pool包含以下代码: -

ThreadPool.QueueUserWorkItem
                (o =>
                MyFunction()
                );

我不确定o=>在此代码中的作用。任何人都可以帮助我。

3 个答案:

答案 0 :(得分:11)

它描述了一个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));

根据QueueUserWorkItem期望的任何内容推断o的类型。 QueueUserWorkItem需要类型WaitCallback,因此在这种情况下,o应该是object类型,因为WaitCallback是具有一个返回void类型的参数的方法的委托。

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

顺便说一句,我和其他人倾向于阅读=>就像'那样'。有些人将其视为“转向”。

答案 1 :(得分:3)

这是lambda表达式的C#语法。

它在很多方面都是内联委托定义。它为您节省了定义用作委托目标的额外函数的繁琐工作。

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

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

答案 2 :(得分:2)

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

ThreadPool.QueueUserWorkItem(MyFunction);