2009-06-10 15 views
5

Bazı VB.Net kodlarında lambdas kullanmaya çalışıyorum, temelde databound çağrıldığında bayrak ayarlamaya çalışıyorum.VB. Net Lambdas ile Mücadele

Bu gibi görünüyor Basitleştirilmiş:

Dim dropdownlist As New DropDownList() 
dropdownlist.DataSource = New String() {"one", "two"} 
Dim databoundCalled As Boolean = False 
AddHandler dropdownlist.DataBound, Function(o, e) (databoundCalled = True) 
dropdownlist.DataBind() 

Benim anlayış değişken her zaman false kaldığı sürece databoundCalled değişken gerçek, açıkça ben eksik bir şey olarak ayarlanması gerekir olmasıdır.

Düzeltmek için ne yapmam gerekiyor?

+0

Basitleştirmeniz sorunu giderdiğinde şaşırmam. Sorunu gösteren bir kısa ama * tamamlandı * programı gönderir misiniz? –

+0

Gönderdiğim kod sorunu gösteriyor. – ilivewithian

cevap

3

Tek satır Lambda'lar DAİMA ifadelerdir, ne lambda ifadesi temelde söylediğini yapıyor databoundCalled = Doğru veya (databoundCalled == True) sizin AC# adam, set değilse databoundCalled = Doğru

+0

Çok yardımcı, teşekkürler (evet C# arkadan geliyorum) – ilivewithian

+0

VB.Net Lambdas, sadece doğru veya yanlış değil, herhangi bir değere değerlendirebilir. Aşağıdaki Fonksiyonu Alın() 42 – JaredPar

+0

Eşit operatörün olmadığı durumlarda haklısınız. –

7

Kodunuzu inceledikten ve kafamı çizdikten sonra, işe yarayan bir çözüm buldum. Şimdi, bu neden sahip olduğunuz üzerinde çalışıyor, ben net değilim. Belki bu en azından doğru yönde size yardımcı olacaktır. En önemli fark, değeri true/false olarak ayarlayan bir yönteme sahibim. Diğer her şey aynı. Umarım bu yardımcı olur

Partial Public Class _Default 
    Inherits System.Web.UI.Page 

    Dim databoundCalled As Boolean = False 
    Dim dropdownlist As New DropDownList() 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Response.Write(databoundCalled) 
     Bind() 
     Response.Write(databoundCalled) 

    End Sub 

    Sub Bind() 
     AddHandler dropdownlist.DataBound, Function(o, e) (SetValue(True)) 

     dropdownlist.DataSource = New String() {"one", "two"} 
     dropdownlist.DataBind() 
    End Sub 

    Function SetValue(ByVal value As Boolean) As Boolean 
     databoundCalled = value 
     Return value 
    End Function 
End Class 

:

İşte benim tüm web projesi kodudur! vb.net içinde

+0

Örnek için teşekkürler, çok yararlı. – ilivewithian

1

yapar Sorun, lambdasların nasıl yorumlandıklarıdır. VS2008'de bir Fonksiyon lambda her zaman bir ifade olarak değil, bir ifade olarak yorumlanır. Bir örnek Bu durumda

Dim x = 42 
Dim del = Function() x = 32 
del() 

olarak aşağıdaki kod bloğunu alın, lambda del içindeki kod atama yapmıyor. Bunun yerine, x değişkeni ve 32 değeri arasında bir karşılaştırma yapmaktır. VB'nin, bir ödev olan bir ifade kavramı olmadığı niçin, yalnızca bir açıklama VB'de bir ödev olabilir.

Bir lambda ifadesinde bir ödev yapmak için ifade yeteneklerine sahip olmanız gerekir. Bu VS2010 kadar mevcut olmayacaktır ama olduğunda tek bir satır lambda bir ifadesi olarak yorumlanır değil şu

Dim del = Function() 
      x = 32 
      End Function 

Esasen her şeyi yapabilir.