【问题标题】:What is (and why do I need) => when creating a task in c# [duplicate]什么是(以及我为什么需要)=> 在 C# 中创建任务时 [重复]
【发布时间】:2013-05-24 23:36:15
【问题描述】:

对不起,如果这很明显。我正在尝试从 VB.NET 跳转到 C#,我目前正在处理任务。在 VB.NET 中,我可以像这样定义一个任务:

    Dim t As New Task(Sub()
                          Threading.Thread.Sleep(1000)
                      End Sub)

任务之后的部分对我来说很有意义,我正在创建一个新方法。

在 C# 中它看起来像:

        Task t = new Task(() =>
            {
                Thread.Sleep(1000);
            });

我猜() 表示这是一种新方法,但我需要=> 是什么以及为什么需要。

【问题讨论】:

  • @BenReich 我的错,我先搜索但没有想到这个。尽管如此,=> 似乎是多余的,但这可能是因为我只使用过 vb.net
  • () 表示方法的参数列表。在这种情况下,您没有任何参数,但无论如何您都需要括号
  • 我认为没有人回答“为什么” - 我认为需要消除 C# 代码解析中可能存在的任何歧义(这可能也是在“遗留”中使用“委托”的原因' C# 代码)。

标签: c# vb.net syntax task


【解决方案1】:

=> 是 C# 用来定义 lambda expression 的语法。

它等同于 VB 任务构造函数中的 Sub() / End Sub

而不是将委托定义为:

Dim del as Action = Sub() Threading.Thread.Sleep(1000)

在 C# 中,你会这样写:

Action del = () => Threading.Thread.Sleep(1000);

Task 只是将相同的语法移到构造函数中,并将其声明为内联。

【讨论】:

    【解决方案2】:

    该示例是使用函数定义的 lamda 表达式创建任务。您也可以使用委托或预定义函数来创建它,如下所示:

    void MyFunction() {
      Thread.Sleep(1000);
    }
    

    并像这样创建您的任务:

    Task t = new Task(MyFunction);
    

    有关 lamda 表达式的更多信息,请参阅以下链接:

    http://msdn.microsoft.com/en-us/library/bb397687.aspx

    【讨论】:

      【解决方案3】:

      如果你喜欢,你可以使用这个等价的语法:

      Task t = new Task(delegate()
      {
          Thread.Sleep(1000);
      });
      

      但在 C# 中,人们几乎总是使用 lambda 语法。

      【讨论】:

        猜你喜欢
        • 2014-06-01
        • 2011-07-21
        • 2018-04-28
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 2018-01-07
        • 2015-07-04
        • 2022-01-22
        相关资源
        最近更新 更多