【问题标题】:What does this code mean (s, e)?这段代码是什么意思(s,e)?
【发布时间】:2011-09-01 21:39:14
【问题描述】:

这段代码是如何工作的?

      app.InstallStateChanged += (s, e) => UpdateUI();
      NetworkChange.NetworkAddressChanged +=
            (s, e) => UpdateNetworkIndicator();

有人可以解读一下吗?

代码来自silverlight 4 OOB系统http://msdn.microsoft.com/en-us/library/dd833066(v=VS.95).aspx中使用的示例

UpdateNetworkIndicator 不返回任何内容。 UpdateUI 不返回任何内容。

【问题讨论】:

    标签: asp.net silverlight silverlight-oob


    【解决方案1】:

    这是一个包含多个参数的lambda expression。在这种情况下(当您使用该函数替换事件处理程序时)它们等效于 objectEventArgs 参数。

    您的代码相当于下面的代码

    app.InstallStateChanged += OnInstallStateChanged;
    NetworkChange.NetworkAddressChanged += OnNetworkAddressChanged;
    
    /* ... */
    
    private void OnInstallStateChanged(object s, EventArgs e)
    {
        UpdateUI();
    }
    
    private void OnNetworkAddressChanged(object s, EventArgs e)
    {
        UpdateNetworkIndicator();
    }
    

    【讨论】:

    • +1 这个答案得到了我的投票。为 good stackoverflow answer IMO 设置适当的模式。
    【解决方案2】:

    这是一个 lambda 表达式。

    "所有 lambda 表达式都使用 lambda 运算符 =>,读作 “去”。 lambda 运算符的左侧指定输入 参数(如果有),右侧包含表达式或 语句块。 lambda 表达式 x => x * x 读作“x 到 x x 倍。”

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

    【讨论】:

      【解决方案3】:

      UpdateUI() 和 UpdateNetworkIndicator() 方法都是自定义事件处理方法。

      += 运算符将这些事件处理程序分别附加到应用程序和 NetworkChange 触发的事件。

      => 表示一个 lambda 表达式。 (s,e) 是输入参数(在本例中为标准 sender, event args),=> 右边是语句或表达式。

      在这种情况下,您可以将其重写为:

      app.InstallStateChanged += UpdateUI;
      NetworkChange.NetworkAddressChanged += UpdateNetworkIndicator;
      

      它应该也能正常工作。

      【讨论】:

      • 感谢大家对此的帮助!我勾选了这一点,因为它将混乱转化为我理解的东西,但我非常感谢其他提高了我理解的 cmets。
      【解决方案4】:

      考虑这个例子

      Button1.Click += (s, e) => log(e);
      

      是简写(使用 lambda 表达式)

      Button1.Click += new EventHandler(Button1_Click);
      

      void Button1_Click(object sender, EventArgs e)
      {
          log(e);
      }
      

      【讨论】:

        【解决方案5】:

        InstallStateChanged 和 NetworkAddressChanged 是事件,您看到的是定义事件处理程序的 lambda 语法,以在触发相应事件时调用 UpdateUI 或 UpdateNetworkIndicator。

        【讨论】:

          【解决方案6】:

          该语法称为Lambda Expression。来自 MSDN,

          lambda 表达式是一个匿名函数,它可以包含 表达式和语句,可用于创建委托或 表达式树类型。

          (s, e) 声明创建的委托或表达式树的输入参数。当有单个输入参数时,不需要括号,您可以只写s => ...。如果有多个参数,则需要括号 - (s, e) =>

          【讨论】:

            【解决方案7】:

            简而言之,s 和 e 指的是函数所针对的属性的对象。代码表示:您可以在此函数中访问两种类型的对象。调用此函数时,从 s 对象获取 this 或 that 属性并按以下方式使用其值。

            所以在假设的情况下

            S 是一个字符串 E 是一个整数

            (s, e) =>

            表示函数中的进一步引用通过名称 s 和 e 引用那些相应的对象类型。

            (s , e) => s.Length + e

            意思是:获取 s 所引用的字符串实例的值,并将 e 所引用的 int 实例的值添加到其中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-04-26
              • 2016-03-28
              • 1970-01-01
              相关资源
              最近更新 更多