这段代码意味着什么(s,e)?

时间:2011-09-01 13:24:58

标签: asp.net silverlight silverlight-oob

此代码如何运作?

      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不会返回任何内容。

7 个答案:

答案 0 :(得分:9)

这是一个lambda表达式。

  

“所有lambda表达式都使用lambda运算符=>,其读作为   “去”。 lambda运算符的左侧指定输入   参数(如果有的话)和右侧包含表达式或   声明块。 lambda表达式x =>读取x * x“x转到x   次x。“

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

答案 1 :(得分:9)

这是包含多个参数的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();
}

答案 2 :(得分:6)

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

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

=>表示lambda表达式。 (s,e)是输入参数(在这种情况下,标准发送者,事件参数)和右侧=>是陈述或表达。

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

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

它应该也能正常工作。

答案 3 :(得分:2)

考虑这个例子

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

的简写(使用lambda表达式)
Button1.Click += new EventHandler(Button1_Click);

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

答案 4 :(得分:1)

InstallStateChanged和NetworkAddressChanged是Events,你看到的是用于定义eventhandler以调用UpdateUI或UpdateNetworkIndicator的lambda语法,如果相应的事件被触发。

答案 5 :(得分:1)

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

  

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

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

答案 6 :(得分:1)

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

所以在假设的背景下

S是一个字符串 E是一个int

(s,e)=>

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

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

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