2011-08-01 22 views
0

私はこの関数を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 

Iは、上記ラインが機能しない

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

vb.netにC#1から関数を呼び出すコードを変換しようとしました。私はつぶれている。私はラムダをC#で使用していませんし、vb.netでもそれほど使用していません。

がMyTypeコンストラクタ:GetAllFactoryを呼び出す方法について

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

任意の提案ですか?

答えて

1

あなたは、ラムダ式の書き込みにVBでFunctionキーワードを使用します。

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

=>がありながら>=は、比較演算子であることをC#のlamda演算子。 VBでは=>を使用するコードで予期しないエラーメッセージが表示されることがあります。これは、>=演算子のドキュメント化されていない別名として受け付けます。

+0

それは素晴らしいです!ありがとうGuffa。 =>(vb.netは=>オーバーロードするために> =?) – TeddyRuxpin

+0

@ user872995:エイリアスとして '=>'を認識したためではないかと思います'> ='のために、それをオペレータの文書化された形式に変更しました。 – Guffa

0

VB.Netラムダ式は、次のようになります。

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

クイックレスポンスのおかげでスラーク:) – TeddyRuxpin

関連する問題