簡體   English   中英

在這個C#代碼中我的方法之后做什么符號“=>”?

[英]What is the symbol “=>” doing after my method in this C# code?

我最近在這里問了一個問題,有人提供了這個答案:

private void button1_Click(object sender, EventArgs e)
{
     var client = new WebClient();
     Uri X = new Uri("http://www.google.com");

     client.DownloadStringCompleted += (s, args) => //THIS, WHAT IS IT DOING?
     {
         if (args.Error == null && !args.Cancelled)
         {
             MessageBox.Show();
         }
     };

     client.DownloadStringAsync(X);
}

那是什么=>做什么? 這是我第一次看到這個。

那是lambda運算符。 你定義了一個匿名函數,它接受兩個參數(s,args)(省略了類型說明符),並且所述函數的主體是在=>符號后出現的。

它在概念上與此相同:

...
client.DownloadStringCompleted += Foo;
}

void Foo(object sender, EventArgs args)
{
    if (args.Error == null && !args.Cancelled)
    {
        MessageBox.Show();
    }
};

基本上它說“我給你這個(s,b) ”並且你正在給我回復s*b或者其他什么東西如果你正在使用帶有表達式的lambda,但它可能是這樣的:我給你這個(s,b)並在語句塊中對它們執行某些操作,如:

{
  int k = a+b;
  k = Math.Blah(k);
  return k;
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Lambda表達式是代替委托實例編寫的未命名方法。 編譯器立即將lambda表達式轉換為:

  • 委托實例
  • 表達式樹

delegate int Transformer(int i);

class Test{
  static void Main(){
     Transformer square = x => x*x;
     Console.WriteLine(square(3));
  } 

}

我們可以像這樣重寫它:

delegate int Transformer(int i);

class Test{
  static void Main(){
     Transformer square = Square;
     Console.WriteLine(square(3));
  } 
  static int Square (int x) {return x*x;}
}

lambda表達式具有以下形式:

(parameters) => expression or statement-block

在前面的例子中,有一個參數x ,表達式是x*x

在我們的例子中,x對應於參數i,表達式x*x對應於返回類型int ,因此與Transformer委托兼容;

delegate int Transformer ( int i);

lambda表達式的代碼可以是語句塊而不是表達式。 我們可以重寫我們的例子如下:

x => {return x*x;}

Expression<T>類型的表達式樹,表示可遍歷對象模型中lamda表達式內的代碼。 這允許lambda表達式稍后在運行時進行編譯(請檢查LINQ的“查詢表達式”)

=>是Lambda運算符 這是一個方便的小家伙,可以幫助您的代碼更具可讀性,更少雜亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM