VB.Net Лямбда-выражение без смысла - PullRequest
3 голосов
/ 09 марта 2011

Использование лямбда-выражений в VB.Net не дает смысла.Это ошибка с VS2010 или ожидается?Обратите внимание, что он отлично работает в C #

Return Array.TrueForAll(chequeColl, Function(x) x.Number <> "N") 'No intellisense Number does not appear


Return Array.TrueForAll(chequeColl, Function(x As MyClass) x.Number <> "N") 'Now casted intellisense appears

ОБНОВЛЕНИЕ: Вот пример

Public Class Cheque

    Public Property Id As String
    Public Property Status As Byte
    Public Property Amount As String
    Public Property Number As String

End Class


Public Class ChequeCollection

    Private chequeColl() As Cheque

    Public Sub DoStuff()
        Array.TrueForAll(chequeColl, Function(x As Cheque) x.Number = 1) 'x has to be cast as cheque for intellisense to appear
    End Sub

End Class

1 Ответ

1 голос
/ 10 марта 2011

Массив объектов не является строго типизированным, как класс List (Of T). Поэтому, когда вы вводите «х». и ожидать, что «число» появится в Intellisese, не будет. Среда выполнения не имеет представления о типах объектов в этом массиве.

Если вы решили сделать это, вы можете использовать LINQ для преобразования этого массива в коллекцию объектов с строго tped, которая будет , а затем покажет вам Intellisense. Следующая строка должна работать правильно:

Dim ChequeList = (Из c В MyArrayOfObjects выберите c) .ToList ()

Также еще одна вещь, чтобы проверить для intellisense VB.NET против C #. «Option Infer» должен быть включен «On». Это по умолчанию , но не для обновленных проектов (т.е. обновлено с 05 -> 08 -> 10)

Почему мои лямбда-функции выдают ошибку во время выполнения с исключением System.MissingMemberException?
http://allen -conway-dotnet.blogspot.com / 2010/09 / почему-это-мой лямбда-функции-throwing.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...