[英]What is => operator in this code
我使用ThreadPool與下面的代碼: -
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));
根據QueueUserWorkItem期望的任何內容推斷o的類型。 QueueUserWorkItem需要類型WaitCallback,因此在這種情況下,o應該是object類型,因為WaitCallback是具有一個返回void類型的參數的方法的委托。
至於這個特定代碼片段的含義 ; 你基本上是將一個函數(工作項)添加到一個隊列中,該隊列將由池中的一個線程執行(當它變為可用時)。 這個特定的代碼片段只是描述了一種很好的,簡潔的傳遞函數的方式,而不必經歷完全定義類方法的麻煩。
順便說一下,我和其他人傾向於將=>讀為'這樣'。 有些人將其視為“去”。
這是lambda表達式的C#語法。
它在很多方面都是內聯委托定義。 它可以節省您定義用作委托目標的額外函數的繁瑣程度。
private object Target(object state) {
MyFunction();
}
...
ThreadPool.QueueUserWorkItem(new WaitCallback(Target));
它正在聲明一種匿名方法。 基本上,你傳遞的是一個身體為{ MyFunction(); }
{ MyFunction(); }
作為QueueUserWorkItem方法的參數。 我沒有檢查過,但它也應該相當於:
ThreadPool.QueueUserWorkItem(MyFunction);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.