Вызов универсальной функции + лямбда - PullRequest
0 голосов
/ 01 августа 2011

У меня есть эта функция в vb.net, которую я конвертировал из C # для проекта, над которым я работаю.

Private Function GetAllFactory(Of T)(ByVal ctor As Construct(Of T)) As List(Of T)

    'TODO: Data Access stuff 
    Dim ds As New DataSet()
    Dim entities = New List(Of T)()

    For Each dataRow As DataRow In ds.Tables(0).Rows
        Dim entity As T = ctor(dataRow)
        entities.Add(entity)
    Next
    Return entities

End Function

и следующий делегат

Private Delegate Function Construct(Of T)(ByVal dataRow As DataRow) As T

Я пытался преобразовать код для вызова функции из C # в vb.net

Return GetAllFactory(Of MyType)(row >= New MyType(row))

вышеприведенная строка не работает. Я вроде застрял. Я не очень много использовал лямбду в C # и даже меньше в vb.net.

Конструктор MyType:

Public Sub New(ByVal dataRow As DataRow)
  .
  .
  .
 End Sub

Есть предложения о том, как вызвать GetAllFactory?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вы используете ключевое слово Function в VB, чтобы написать лямбда-выражение:

Return GetAllFactory(Of MyType)(Function(row) New MyType(row))

Обратите внимание, что >= является оператором сравнения, в то время как => является оператором lamda в C #. VB может выдать вам неожиданное сообщение об ошибке для кода, использующего =>, поскольку он принимает это как недокументированный псевдоним для оператора >=.

0 голосов
/ 01 августа 2011

VB.Net лямбда-выражения выглядят так:

Return GetAllFactory(Of MyType)(Function(row) New MyType(row))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...