Как объявить обработчики событий лямбды в VB.Net?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
20
задан svick 6 January 2013 в 13:33
поделиться

2 ответа

Примечание: Это касается более старых версий VB.net До Visual Studio 2010 и VB.net 10

, различие - то, что в VB.Net лямбда-выражение должно возвратить значение, т.е. они должны быть функциями не замены. Лямбда-выражение eventRaised = true интерпретируется как булево выражение, а не присвоение т.е. оценивает ко лжи вместо того, чтобы установить на истинный.

Более подробная информация о MSDN.

я, не думают, что c# шаблон для тестирования событий, используемых в примере, может быть сделан в VB.Net, не представляя другую функцию, например,

<TestFixture()> _
Public Class Test
    <Test()> _
    Public Sub EventTest()
        Dim eventClass As New EventClass
        Dim eventRaised As Boolean = False
        AddHandler eventClass.AnEvent, Function() (SetValueToTrue(eventRaised))
        eventClass.RaiseIt()
        Assert.IsTrue(eventRaised)
    End Sub

    Private Function SetValueToTrue(ByRef value As Boolean) As Boolean
        value = True
        Return True
    End Function

End Class

Public Class EventClass
    Public Event AnEvent()
    Public Sub RaiseIt()
        RaiseEvent AnEvent()
    End Sub
End Class
16
ответ дан 30 November 2019 в 00:09
поделиться

Короче говоря, Вы не можете сделать этого в VB в настоящее время (это находится в списке функций, которые рассматривают для следующего выпуска). Необходимо использовать заявленный метод и оператор AddressOf.

у команды VB не было времени для включения анонимных делегатов в язык (который является тем, что Вы пытаетесь использовать, технически не лямбда-выражение).

Лямбда-выражения они должны были реализовать так, чтобы Linq мог на самом деле работать. Анонимные делегаты не требуются ничем (но было бы довольно полезно). Я предполагаю, что они провели больше времени при оборачивании вещей как Linq К XML и побережьям XML и интеграции большего количества операторов запроса в синтаксисе...

2
ответ дан 30 November 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: