1

我在库中调用方法“Foo(object s,Action action)”。由于该函数本身涉及一些执行时间,因此我使用 CountDownEvents' 在函数完成其工作时通知我。

就像是,

countdownEvent.Reset();


try
 {
     Foo(obj, ()=> countdownEvent.Signal());
 }
 catch(Exception e)
 {
    countdownEvent.Signal();
 }
 countdownEvent.Wait();

我不明白的部分是

  1. () => countdownEvent.Signal() 是什么意思?“()=> ”特别代表什么?
  2. 为什么方法签名没有写 Foo(object s, CountDownEvent event) 并且它可以在内部发出信号?
  3. 我还没有真正理解 Action 类。谷歌了一下,但找不到一些超级简单的例子来开始。

任何帮助表示赞赏!

4

3 回答 3

3

() => countdownEvent.Signal()是一个lambda 表达式

在这种特殊情况下,是某种匿名方法,它不带参数并且具有与countdownEvent.Signal().

于 2013-07-18T06:20:45.487 回答
2
  1. () =>是一个 lambda 构造(请参阅C# Lambda ( => ))。通过使用 lambda 表达式,您可以编写可以作为参数传递或作为函数调用的值返回的局部函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。但是您可以使用它来编写任何类型的委托实现。
  2. 您可以以您显示的方式指定相同的代码,但使用 Action 使其更加灵活。在第一种情况下,它是一个特定的函数,具有声明的行为。其次 - 它是一些活动,您可以根据程序的逻辑进行更改。
  3. Action只是一个委托,它声明了一些动态行为。它封装了一个有参数不返回值的方法。要引用具有参数返回值的方法,请改用泛型 Func 委托。当您的类期望某些行为并且您希望您的类消费者自己声明此行为时,通常会使用它。

更新:根据 VikciaR 评论

于 2013-07-18T06:21:22.270 回答
1
  1. 这就是所谓的 Lambda 表达式。您可以将其视为简单的内联方法。()=> 表示此方法没有参数。(string x)=> 意味着 - 一个参数。
  2. 事件和 lambda 表达式是类似的概念(Lambda 表达式是从委托演变而来的)。在这里阅读。
  3. MSDN是最好的:-)
于 2013-07-18T06:26:33.130 回答