【问题标题】:Function assign with multiple line [duplicate]多行功能分配[重复]
【发布时间】:2017-11-30 21:09:35
【问题描述】:

我是 C# 编程新手,我知道 每当调用 videoDownloader.DownloadProgressChanged 时,videoDownloader.DownloadProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage); 将运行 Console.WriteLine。但我不知道如何在该功能中有不止一行。

我希望能够拥有类似的东西:

videoDownloader.DownloadProgressChanged += (sender, args)
{
    if ((args.ProgressPercentage % 1) == 0)
    {
        Console.WriteLine(args.ProgressPercentage);
    }
}

另外,有人可以向我解释这是什么(以及它叫什么)以及如何/何时使用这种东西吗?

【问题讨论】:

  • 如果你是初学者,那么你肯定想定义一个真正的函数而不是使用匿名函数
  • 只需在带参数的括号后面放一个=>,就像在单行版本中一样:(sender, args) => { ...。我猜有人会为此获得 15 个简单的神奇宝贝积分。
  • 要了解如何创建、使用和处理 C# 事件,请访问docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events

标签: c#


【解决方案1】:

您只是缺少箭头运算符 (=>) 来让 C# 编译器知道 (sender, args) 之后的内容是一个函数体。

您还需要在最后一个大括号后添加分号以结束复合赋值 (+=) 语句。

正确版本:

videoDownloader.DownloadProgressChanged += (sender, args) => // note the arrow here
{
    if ((args.ProgressPercentage % 1) == 0)
    {
        Console.WriteLine(args.ProgressPercentage);
    }
}; // note the semicolon here

要了解有关匿名函数的更多信息,请访问相关的 Microsoft 文档主题:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-functions

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 2021-06-30
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多