2011-04-07 22 views
6

MAX lambda ifadesinin vb eşitleyicisini kullanarak bir sorun yaşıyorum. foos.Max (function (x) x.id) de VS bunu göstermez mülkiyet kimliği IntelliSense çalıştığınızda. Ama örneği çalıştırdığımda işe yarıyor. Yaptığım bir şey var yanlış olan, ben sadece şanslı çalışır?vb lambda MAX işlevi

Sub Main() 
     Dim foos As New List(Of Foo) 
     Dim bob As New Foo() With {.id = 5, .name = "bob"} 
     foos.Add(bob) 
     foos.Max(Function(x) x.id) 
    End Sub 

    Public Class Foo 
     Public Property id() As Integer 
      Get 
       Return m_id 
      End Get 
      Set(ByVal value As Integer) 
       m_id = Value 
      End Set 
     End Property 
     Private m_id As Integer 
     Public Property name() As String 
      Get 
       Return m_name 
      End Get 
      Set(ByVal value As String) 
       m_name = Value 
      End Set 
     End Property 
     Private m_name As String 
    End Class 

cevap

7

Sen kullandığınız Visual Studio hangi sürümünü belirtmedi, ama benim tahminim bu reported to Microsoft olmuştur IntelliSense Ayrıca VS 2010 yılında düzgün çalıştığını çünkü VS 2008 var ve onlar olur belirtti Visual Studio'nun bir sonraki sürümünde, bu raporun yazıldığı tarih olan 2010'da düzeltilmelidir.

Kodunuz düzgün çalışıyor ve düzgün çalışıyor, bu yüzden yanlış bir şey yapmıyorsunuz. Eğer gerçekten bir lambda ifadesi için VS 2008 yılında IntelliSense almak istiyorsanız türünü belirtmek gerekir:

foos.Max(Function(x As Foo) x.id) 

As Foo IntelliSense'ın destek almalısınız ekleyerek. Tekrarlamak gerekirse, sorun VS 2010'da çözüldü.