2009-03-22 62 views
13

Từ những gì tôi có thể tìm thấy trên google, VB.NET chỉ có một câu lệnh lambdas chứ không phải các hàm ẩn danh nhiều câu lệnh. Tuy nhiên, tất cả các bài viết tôi đọc đều nói về các phiên bản cũ của VB.NET, tôi không thể tìm thấy bất kỳ điều gì gần đây hơn so với bản beta 1 năm 2008 hoặc 2.VB.NET có các chức năng ẩn danh không?

Vì vậy, câu hỏi: Làm thế nào tôi có thể làm điều này trong VB.NET? # mã

C:

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

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

Trả lời

26

Nó trong 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

ví dụ tuyệt vời ... mặc dù tôi không nhận ra cà rốt là thịt :) –

+0

cà rốt: hãy thử thịt cam duy nhất! – Fredulom

9

VB9 chỉ có dòng đơn chức năng ẩn danh. Chúng tôi đang thêm tuyên bố đầy đủ và lambdas đa dòng trong VB10.

18

Visual Basic .NET chỉ có biểu thức lambda.

Nó không hỗ trợ 'đại biểu vô danh" trong phiên bản hiện tại, mặc dù nó sẽ (và trên nhiều dòng tại đó) trong VS2010.

Ngay bây giờ lựa chọn duy nhất là phải khai báo phương pháp của bạn ở đâu đó và vượt qua nó với các nhà điều hành AddressOf

+0

không may đây là một lỗ hổng lớn, tôi nghĩ. Tôi không thể chờ đợi điều này. Mặt khác, họ đã làm một công việc tốt đẹp trên cú pháp truy vấn XML litterals và hỗ trợ LinqToXML ... –

+0

Đây là một bài viết hay từ cOdE mag nói về các phương thức nặc danh và biểu thức lambda http: //www.code-magazine. com/Article.aspx? quickid = 0809081 –

-4

này là không chính xác VB.NET nào trong thực tế đã phương pháp vô danh Dưới đây là một ví dụ:..

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

phương pháp ẩn danh trong đoạn mã đó ở đâu? – Lucas

+2

Nó được gọi là JsonToObject. Xin lỗi không thể giúp bản thân mình: P – Spyros

0

trong ví dụ này tôi có một danh sách các hoạt động nhưng chỉ muốn tìm một từ một danh sách (T), nơi các trận đấu ID:

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

operationID là một biến địa phương thông qua vào phương pháp và các hoạt động là danh sách chung.

0

Anonymous không phải là một đại biểu hoặc chức năng đó là một động lực mạnh mẽ loại

bạn có thể sử dụng chức năng chung

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 
Các vấn đề liên quan