C# / Lambda:对象参数解释请求(noob)
这里有一个关于这篇文章的全新问题: ThreadPool.QueueUserWorkItem 与lambda 表达式和匿名方法
具体如下:
ThreadPool.QueueUserWorkItem(
o => test.DoWork(s1, s2)
);
有人可以解释一下“o”是什么吗?我可以看到(在 VS2008 中)它是一个对象参数,但我基本上不明白为什么以及如何。
Completly new here with a question regaridng this post : ThreadPool.QueueUserWorkItem with a lambda expression and anonymous method
Specific this :
ThreadPool.QueueUserWorkItem(
o => test.DoWork(s1, s2)
);
Can somebody please explain what the 'o' is? I can see the (in VS2008) that it is a object parameter but I basically don't understand why and how.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
ThreadPool.QueueUserWorkItem
需要WaitCallback
委托作为参数。此委托类型对应于
Object
类型参数的void
函数。因此,完整版本的调用可以
更简洁,
使用 C# 3.0 语法,我们可以以更简短的形式编写它:
C# 3.0 lambda 语法允许省略
state
的类型。由于实际上并不需要此参数,因此它也缩写为其类型的第一个字母。ThreadPool.QueueUserWorkItem
requires aWaitCallback
delegate as argument.This delegate type corresponds to
void
function of one argument of typeObject
.So, full version of the call could be
More concise would be
Using C# 3.0 syntax we can write it in more short form:
C# 3.0 lambda syntax allows to omit
state
's type. As this argument isn't really needed, it is also abbreviated to the first letter of its type.来自
QueueUserWorkItem的文档
,第一个参数是 WaitCallback< /a> 具有以下定义:状态的定义是:
因此,
QueueUserWorkItem
的第一个参数是一个函数,它接受一个对象(可选的用户状态)并执行返回 void 的操作。在您的代码中,o 是用户状态对象。在本例中没有使用它,但它必须存在。From the documentation of
QueueUserWorkItem
, the first parameter is a WaitCallback with the following definition:The definition of state is:
So the first parameter of
QueueUserWorkItem
is a function which takes an object (an optional user state) and does something that returns void. In your code, o is the user state object. It is not used in this case, but it has to be there.只需查找一下:
o
是一个状态对象,您可以使用QueueUserWorkItem
的重载版本传递给执行的方法。当您没有明确传递一个值时,它就是null
。这种方法在没有可用的 lambda 表达式时很有用。
Just look it up: The
o
is a state object you may pass to the executed method using the overloaded version ofQueueUserWorkItem
. When you don't pass one explicitly, it'snull
.This way useful in times when no lambda expression were available.
o
是 lambda 函数的形式参数。其类型由QueueUserWorkItem的参数类型派生。o
is a formal parameter to the lambda function. Its type is derived by the parameter type of QueueUserWorkItem.其他答案都很好,但如果您在不使用 lambda 表达式或委托方法(即以 .NET 1 方式执行)的情况下了解等效内容,也许会有所帮助:
The other answers are good, but maybe it helps if you see what is the equivalent without using neither lambda expressions nor delegate methods (that is, doing it the .NET 1 way):