C#/ Lambda:对象参数说明请求(noob)

Mob*_*erg 3 c# lambda

这里有一个问题,这篇文章完全是新的:带有lambda表达式和匿名方法的ThreadPool.QueueUserWorkItem

具体如下:

ThreadPool.QueueUserWorkItem(
    o => test.DoWork(s1, s2)
    );
Run Code Online (Sandbox Code Playgroud)

有人可以解释'o'是什么?我可以看到(在VS2008中)它是一个对象参数,但我基本上不明白为什么以及如何.

eld*_*rge 10

ThreadPool.QueueUserWorkItem需要WaitCallback委托作为参数.

此委托类型对应于void一个类型参数的函数Object.

所以,完整版的通话可能是

ThreadPool.QueueUserWorkItem(
    new WaitCallback(delegate(object state) { test.DoWork(s1,s2); });
);
Run Code Online (Sandbox Code Playgroud)

会更简洁

ThreadPool.QueueUserWorkItem(
    delegate(object state) { test.DoWork(s1,s2); };
);
Run Code Online (Sandbox Code Playgroud)

使用C#3.0语法,我们可以用更简短的形式编写它:

ThreadPool.QueueUserWorkItem(
    (object state) => { test.DoWork(s1,s2); };
);
Run Code Online (Sandbox Code Playgroud)

C#3.0 lambda语法允许省略state类型.由于这个参数不是真的需要,它也缩写为它的类型的第一个字母.