функция vb lambda MAX

#vb.net #lambda

#vb.net #лямбда

Вопрос:

У меня возникла проблема с использованием эквивалента vb лямбда-выражения MAX. в foos.Максимальная(функция(x) x.id ) когда я пытаюсь использовать intellisense, ID свойства VS не отображает его. Но когда я запускаю пример, он работает. Есть ли что-то, что я делаю неправильно, и мне просто повезло, что она запускается?

  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
  

Ответ №1:

Вы не указали, какую версию Visual Studio вы используете, но я предполагаю, что это VS 2008, поскольку IntelliSense корректно работает в VS 2010. Кроме того, об этом было сообщено Корпорации Майкрософт, и они заявили, что это будет исправлено в следующей версии Visual Studio, которая на момент написания этого отчета будет 2010.

Ваш код работает нормально и компилируется, потому что он правильный, так что вы не делаете ничего неправильного. Если вы действительно хотите получить IntelliSense в VS 2008 для лямбда-выражения, вам нужно будет указать тип:

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

Добавив As Foo , вы должны получить поддержку IntelliSense. Повторяю, проблема была решена в версии 2010.