2010-01-12 5 views
8

Yapıcıda bir işlem gerçekleştiren bir sınıfım var.Lambda ifadesi yöntemini kullanarak iki parametre ile işlem nasıl geçilir?

Örnek:

var custom = new CustomClass((o) => LayoutRoot.Children.Add(o)); 

I, aşağıdaki gibi ek bir kurucu, dahil etmek özel bir sınıf değiştirme istiyorum: Şu anda aşağıdaki kod satırını kullanarak bu sınıfın bir örneğini

public CustomClass(Action<Path> insert) 
{ 

    // logic here... 

} 

:

Ancak, lambda ifadeleri hakkındaki bilgim oldukça basit, Özel sınıfa nasıl örnek oluşturulacağını, eylemde iki parametreyi yeni yapıcıya geçirmeyi öğrenemez.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

Teşekkürler. Sadece bir Action<T,T2> olarak insert eylemi tanımlamak, eyleme 2 parametre geçmek için

(x, y) => { x.DoSomething(); y.DoSomethingElse(); } 
+1

Gelecekte başvurmak için, lambda ifadesinin farklı formları için sözdizimi C# belirtiminin 7.14 bölümünde açıklanmıştır. –

+4

@Eric: Elbette, tüm C# geliştiricileri önceden belirtilenleri okuyacaktır. – AnthonyWJones

cevap

11

ve Aradığınızda bunu böyle yapmak:

Lamba yılında
+0

Harika - çok teşekkür ederim! – Chris

+0

Her iki kurucunun da aynı olması gerekmiyordu - Kod snippet'leri 'kod' olarak biçimlendirmeyi unuttum, bu yüzden orijinal soruyu yayınladığımda, kurucular bir şekilde aynı görünüyordu, bu yüzden snippet'leri kod olarak biçimlendirmek için yayını düzenledim. ve şimdi yapıcılar farklı olmalı. Her neyse, cevabınız işe yaradı, bu yüzden tekrar teşekkürler! – Chris

+0

Yardım ettiğine sevindim .. cevap olarak işaretleyebilir ve/veya oy verebilir misiniz? Teşekkürler! –

6

aşağıdaki gibi iki parametre iletebilirsiniz

var custom = new CustomClass((o,u) => {LayoutRoot.Children.Add(o); somethingElse(u)}); 
+1

evet, ama aynı zamanda yapıcıyı nasıl değiştirebileceğini de göstermelisiniz 'Action' –

+0

Eğer bir bileşik ifadesi varsa, vücudun etrafında kaşlı ayraçlara ihtiyacınız olacak: (x, y) => {) (x.DoSomething; y.DoSomethingElse(); } – Dathan

+1

Burada {} kayıp bir çift var mı? – AnthonyWJones

2

ya

public CustomClass(Action insert, Action insert2) { // logic here... } 

veyasoruyorsunuz 0 Kurucu, 2 parametre alan bir temsilci alacaktır. Gerçekleştirmek gerekiyorsa

var custom = new CustomClass((o, tb) => /* use both params somehow */); 

: Yani

CustomClass class = new CustomClass((x,y) => DoSomething(x,y)); 
2

gibi bir şey yapabilirsiniz Sen parametreyi ayırmak parantez ve virgülle parametre listesi çevreleyen birden fazla parametre alır lambda ifade oluşturabilir daha bir lambda bir açıklamada yerine, parantez ile lambda gövdesini çevreleyen edebilirsiniz:

var custom = new CustomClass((o, tb) => { o.DoSomething(); tb.DoSomethingElse() }); 

sen lambda syntax here on MSDN hakkında daha fazla bilgi edinebilirsiniz.