2009-03-22 9 views
13

私はgoogleで見つけることができますから、VB.NETは、単一ステートメントのlambdaを持っていて、マルチステートメントの匿名関数ではありません。しかし、私が読んだすべての記事は、VB.NETの古いバージョンについて話していましたが、vs2008のベータ1または2より最近のものは見つかりませんでした。VB.NETには匿名機能がありますか?

質問:VB.NETでどうすればいいですか?

C#コード:

private void HandleErrors(Action codeBlock){ 
    try{ 
     codeBlock(); 
    }catch(Exception e){ 
     //log exception, etc 
    } 
} 

HandleErrors(() => { 
    var x = foo(); 
    x.DoStuff(); 
    etc 
}); 

答えて

26

それはVB10で行います。

Dim food = New With { 
    .ID = 1, 
    .Name = "Carrot", 
    .Type = (
     Function(name As String) 
      If String.IsNullOrEmpty(name) Then Return String.Empty 

      Select Case name.ToLower() 
       Case "apple", "tomato": Return "Fruit" 
       Case "potato": Return "Vegetable" 
      End Select 

      Return "Meat" 
     End Function 
    )(.Name) 
} 
Dim type = food.Type 
+5

偉大な例...私はニンジンが肉であることを認識しませんでした:) –

+0

ニンジン:唯一のオレンジの肉を試してみてください! – Fredulom

9

VB9は、単一行の匿名の機能を有しています。私たちはVB10で完全なステートメントと複数行のラムダを追加しています。

18

Visual Basic .NETにはラムダ式しかありません。

それは意志(およびそのにて複数行に)VS2010インチ

今唯一のオプションは、どこかにあなたの方法を宣言して、それを渡すことですが、それは、現在のバージョンでは「匿名デリゲートを」サポートしていません。 。AddressOf演算子

+0

一般的な機能を使用することができ、強力な動的タイプ

のデリゲートまたは関数 ではありません。私はこれが含まれるのを待つことはできません。 一方、彼らは、クエリ構文XML litteralsとLinqToXMLサポートについて素晴らしい仕事をしました... –

+0

ここでは、cOdE magの匿名メソッドとラムダ式http://www.code-magazineについての記事があります。 com/Article.aspx?quickid = 0809081 –

-4

これが不正確であるVB.NETは実際にはありません匿名メソッドを持って次に例を示します。

私は操作のリストを持っているだけ(Tの)リストから1を見つけたい、この例では
Private Function JsonToObject(Of T)(Value As String) As T 
    Dim JavaScriptSerializer As New System.Web.Script.Serialization.JavaScriptSerializer() 
    Return JavaScriptSerializer.Deserialize(Of T)(Value) 
End Function 

Dim People As Generic.List(Of Person) = JsonToObject(Of Generic.List(Of Person))(Json) 
+6

そのコードスニペットの匿名メソッドはどこですか? – Lucas

+2

これはJsonToObjectと呼ばれています。申し訳ありませんが自分自身を助けることができなかった:P – Spyros

0

IDが一致:

Return operations.Find(Function(p) p.OperationID = operationID) 

operationIDは方法や操作に渡されたローカル変数であります一般的なリストです。

0

匿名それはあなたが、残念ながら、これは私が考える大きなぽっかり穴である

Sub Main() 
     Dim PersonDynamicType = AnonyFunc(New With {.Name = "david", .Family = "Fisher"}) 
     Console.Write(PersonDynamicType.Name) 
End Sub 

Function AnonyFunc(Of t)(v As t) As t 
     Return v 
End Function 
関連する問題