2010-01-20 59 views
9

Chức năng, có sự khác biệt nào (ngoài cú pháp onbviously) giữa các biểu thức lambda trong C# và VB.Net không?biểu thức lambda trong C# vs. vb.net

EDIT: theo dõi câu trả lời của CraigTP: bất kỳ tham chiếu nào đến tình huống trong .Net 4?

EDIT: Tôi hỏi vì tôi đã quen với C#, nhưng đối với dự án tiếp theo, khách hàng hỏi VB.Net. Chúng tôi không phải là một ưu tiên chống lại điều đó. Chúng tôi nhận thấy rằng hầu hết các cấu trúc ngôn ngữ đều được hỗ trợ ở cả hai ngôn ngữ. Tuy nhiên, chúng tôi đặc biệt thích cách C# triển khai các biểu thức lambda. Chúng tôi muốn có một cái nhìn tổng quan về sự khác biệt với VB.Net

EDIT: chấp nhận câu trả lời của CraigTP để chỉ ra những gì tôi hiện đang xem xét sự khác biệt quan trọng nhất.

Vì vậy, để tóm tắt: VB.Net 9 không hỗ trợ câu lệnh nhiều dòng trong biểu thức lambda và lambda phải luôn trả về giá trị. Cả hai vấn đề này đều được đề cập trong VB.Net 10

Trả lời

13

không có sự khác biệt chức năng, tuy nhiên, như Joe Albahari nói trong this forum post:

VB.NET không hỗ trợ đa tuyên bố biểu thức lambda hoặc nặc danh phương pháp.

Lưu ý rằng điều này dựa trên C# 3.0 và VB.NET 9.0 (ví dụ: phiên bản Visual Studio 2008 của ngôn ngữ) - Tôi không chắc liệu nó vẫn áp dụng với Visual Studio 2010 (C# 4.0 và VB .NET 10.0 tương ứng).

EDIT:

Theo Richard Szaley và ý kiến ​​của riêng tôi, VB.NET 10,0 (mà sẽ là một phần của Visual Studio 2010) DOES hỗ trợ lambdas đa tuyên bố, và đây là một liên kết đến một 9 Video MSDN kênh cho thấy tắt tính năng này (cùng với nhiều người khác!):

Lucian Wischik and Lisa Feigenbaum: What's new in Visual Basic 10

+0

Biểu thức lambda đa cấp được hỗ trợ trong VB.NET 10 –

+0

@Richard - Cảm ơn bạn đã nhận xét. Tôi có cảm giác rằng đây là thứ họ đã thêm vào VB.NET 10.0 nhưng không chắc chắn 100% và hoàn toàn không có thời gian (tại thời điểm trả lời) để nghiên cứu đầy đủ điều này. – CraigTP

+1

Đây là một liên kết đến một video MSDN kênh 9 cho thấy sự hỗ trợ của VB 10 của lambdas đa tuyên bố (và nhiều tính năng mới hơn!): Http://channel9.msdn.com/posts/Dan/Lucian-Wischik-and- Lisa-Feigenbaum-Whats-new-in-Visual-Basic-10/ – CraigTP

4

Không có lý do gì sẽ xảy ra, vào cuối ngày, tất cả các biểu thức sẽ được xây dựng cho cùng một cấu trúc đối tượng - được sử dụng bởi cả hai ngôn ngữ dưới bìa (tại nhất là với các phiên bản mới nhất)

8

Biểu thức Lambda trong VB.NET (trước năm 2010) phải trả về giá trị. Ví dụ, cú pháp như sau là không hợp lệ trong VB.NET 9, nhưng có giá trị trong VB.NET 10 (mã từ Mike McIntyre's blog):

Array.ForEach(numbers, Sub(n) 
    Console.Write("Number: ") 
    Console.WriteLine(n) 
End Sub) 
4

Các quy tắc cho phương pháp chung chung kiểu tham số suy luận từ ngầm gõ tham số lambda khá khác nhau trong VB và C#.

Chúng tôi có thể liệt kê các khác biệt nhỏ cả ngày; điều này có lẽ sẽ đi nhanh hơn nếu bạn làm rõ lý do tại sao bạn yêu cầu.

+0

xem câu hỏi đã chỉnh sửa của tôi – jeroenh