#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
все остальное.