解释c#lambda语法

时间:2013-02-22 16:35:09

标签: c# lambda expression

我对Lambda表达式有一般的了解,但不确定() =>语法的含义。此代码似乎返回任务项列表,但我不确定它是如何执行的或如何解释它的含义。

有人可以告诉我:

  1. () =>是什么意思?
  2. 似乎每个new Task块都是按顺序执行的?
  3.  private DateTime? _myTime = null;
     private DateTime? _theirTime = null;
     private bool _okToProcess = true;
    
     List<Task> myTasks = new List<Task>
                {
                       new Task( () => 
                        {
                            _myTime = GetMyTime();
                        }),
    
                         new Task( () => 
                        {
                            _theirTime = GetTheirTime(); 
                            _okToProcess = _myTime > _theirTime;                                         
                        }),
    
                    new Task(() => 
                        {
                            if (_okToProcess)
                            {
                               WriteToMyLogStep("We are processing");
                            }
                            else
                            {
                               WriteToMyLogStep("We are NOT processing");
                            }
                         });
                };
    

7 个答案:

答案 0 :(得分:4)

() - 表示匿名方法所采用的参数,

=> - 通常会读到转到并指向使用这些参数的匿名方法主体(如果有的话)。

在您的情况下,lamda表达式与:

相同
 delegate() {  _myTime = GetMyTime(); }

对于他们刚刚添加到列表中的任务,它们不会被执行。它们的执行方式取决于您将来如何执行它们。 (可能在同一个线程或可能在不同线程上的循环中)。

答案 1 :(得分:4)

() =>语法只意味着lambda没有命名输入。这就像调用一个不带参数的方法。

至于代码,任务刚刚创建但从未实际启动过,因此它们不会在显示的代码中运行。我假设列表已枚举,任务在其他地方启动。

答案 2 :(得分:2)

您可能习惯于看到像x => DoSomething(x)这样的lambda函数。这实际上是(x) => DoSomething(x)的简写 - 初始(x)代表函数的参数,与(x)中的DoSomething(x)相同。确实

在这种情况下,没有参数,因此它使用(),与常规函数相同DoSomething()

至于Task,它们会在启动后并行运行,除非你明确等到每一个完成后才开始下一个。

答案 3 :(得分:0)

()类似于函数所采用的参数,我相信任务是异步执行的 =&GT;指向函数体的

答案 4 :(得分:0)

  1. 要执行的匿名行动;
  2. 任务仅定义,不执行。

答案 5 :(得分:0)

()=>Action - 没有参数的表达式。

这些任务尚未开始,因此(目前)永远不会完成...

答案 6 :(得分:0)

  1. ()是您的参数列表,在您的情况下为空或无,将传递到=>运算符后面的匿名函数中。 =>的名字来源于Lambda演算。

  2. 这取决于您在列表中调用任务的方式。这只是一个List<Task>,其中包含任务。为了执行您的任务,您需要执行以下操作:

    foreach (Task t in myTasks) {
        t.RunSynchronously();  // in this case the tasks would run synchronously
    }