2009-02-26 33 views
18

Ben Derinlik sitesinde Jon Skeet en C# bazı kod yapıştırılan:Eylemler kullanırken,() bir lambda ifadesinde ne anlama gelir?

static void Main() 
{ 
    // First build a list of actions 
    List<Action> actions = new List<Action>(); 
    for (int counter = 0; counter < 10; counter++) 
    { 
     actions.Add(() => Console.WriteLine(counter)); 
    } 

    // Then execute them 
    foreach (Action action in actions) 
    { 
     action(); 
    } 
} 

http://csharpindepth.com/Articles/Chapter5/Closures.aspx

Bildirimi hattı:

actions.Add (() ne yapar

() parantez içindeki demek? Ben kullanımını lambda ifadeleri, delegelerin çeşitli örnekler gördük

Eylem nesnesi, vb ama bu sözdizimi hakkında hiçbir açıklama görmedim. Bu ne işe yarıyor? Neden ihtiyaç duyuluyor? parametreler olmadan Lambda deyimi var

cevap

31

Bu argümansızdır lambda ifade beyan için kısaltmadır.

() => 42; // Takes no arguments returns 42 
x => 42; // Takes 1 argument and returns 42 
(x) => 42; // Identical to above 
+0

dang sözdizimi vurgulama hatası – Will

+0

@Will teşekkürler, günlük olarak çok fazla dilde çalışıyorum – JaredPar

+2

(() 'Birden fazla kütle ihtiyacın olduğunda zorunludur parametre: '(x, y) => x * y' – istepaniuk

5

.

1

bir parametre olmadan anonim işlev göstermektedir.

2

MSDN. Bir İfade lambda, form (inputs) => ifadesini alır. Yani lambda benzeri() => ifadesi, giriş parametresi olmadığını gösterir. Eylem için imzanın hangi parametresinin alınmadığı

2

Bu satırda, lambda ifadeleri kullanılarak listeye anonim bir eylem eklemek, parametreyi (bu nedenle() öğesinin neden budur) ve hiçbir şey döndürmemesidir. sadece sayacın gerçek değerini basması gerçeği.

3

böyle lambas düşünüyorum:

(x) => {x * 2 return; }

Ancak, yalnızca bu önemlidir:

(x) => {x * 2 döndürür; }

Biz yerine döküm bir lambda olduğunubilmeni> = gerekir ve böylece biz bu olsun:

x = x * 2

(üzgün kodu olarak kod biçimlendirme için değil, işte> çünkü kod içinde bir şeyler yapamazsınız ..)

İlgili konular