Как мне реализовать лямбда-выражения в VB.NET (Ошибка: выражение не является методом)

#vb.net #lambda

#vb.net #лямбда

Вопрос:

Курс колледжа, который я делаю, требует программирования в VB.NET

Я использую VDE и пытаюсь реализовать класс «Entity», который имеет лямбда-поля. Ресурс, который я использовал, чтобы попытаться реализовать это: https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/lambda-expressions Я хотел бы добавить, что я новичок в разработке VB.

 Public Class Entity
    Public entityHandler As EntityHandeler
    Public mover = Sub()
                   End Sub 'position itterating lambda (SUB)
    Public collision_resolver = Sub(e As Entity)
                                End Sub 'collision behaviour lamda (ENTITY SUB)
    Public renderer = Sub()
                      End Sub 'rendering lambda (SUB)
  

     Private Sub tmrMainLoop_Tick(sender As Object, e As EventArgs) Handles tmrMainLoop.Tick
        For Each entity As Entity In mainHandler.entity_set
            entity.mover() 'Error: Expression is not a method
        Next
    End Sub
  

Я изо всех сил пытаюсь выяснить, что пошло не так и как правильно реализовать лямбда-выражения.

Комментарии:

1. Просто, если кто-нибудь спросит: да, в этом коде есть опечатки, IDE только автоматически исправляет некоторые вещи, а правописание затруднено.

2. У вас может быть что-то вроде public mover as Action = New Action(Sub() ' Some action End Sub) и, например, public collision_resolver as Func(Of Entity, Action) = Function(e As Entity) Sub() e.mover()

Ответ №1:

Для компиляции этого кода у вас должен быть Option Strict Off . Вы должны немедленно это исправить. Ваше поле неявно вводится как Object , и вы не можете вызвать Object ссылку.

При Option Strict On этом вы будете вынуждены указать тип для этого поля. Очевидный тип Action :

 Public mover As Action = Sub()
                         End Sub
  

поскольку Action это тип делегата, его можно вызывать как метод.

Вы должны включить Option Strict On свойства проекта, а также параметры IDE, чтобы это было On по умолчанию для всех будущих проектов.

Комментарии:

1. Спасибо за помощь, я протестирую все это на моем следующем уроке по вычислению или когда появится мой ноутбук с Windows.

2. Вы можете — и должны — явно указать тип поля даже с Option Strict Off помощью , но вы действительно должны работать с Option Strict On ним все время, если вам это специально не нужно Off , что очень и ОЧЕНЬ редко встречается у большинства людей. Даже если вам это нужно Off , установите это на уровне файла и используйте частичные классы, чтобы свести код в этих файлах к абсолютному минимуму, чтобы у вас было Option Strict On все остальное.