2009-07-20 26 views
8

Tôi đang bắt đầu chương trình trong C# 2.0, vì vậy tôi chưa bao giờ sử dụng biểu thức lambda, nhưng, tại sao rất nhiều phiền phức về nó? Có phải họ chỉ là cú pháp đường xung quanh các đại biểu vô danh, hay có cái gì đó mà tôi không thể thấy?Tại sao cường điệu như vậy với hàm C# lambda?

+0

Novelty là phần thưởng riêng của mình: http://arstechnica.com/old/content/2008/06/mri-study-suggests-novelty -is-its-own-reward.ars – Greg

+1

Vâng, đó là một bản sao, "mục đích của lambdas" đã được yêu cầu một tỷ lần.Nhưng tôi không nghĩ mọi người dường như có ý tưởng về bản sao một cách nghiêm túc nữa. –

+14

Vâng, đó là một bản sao, "mục đích của lambdas" đã được yêu cầu một tỷ lần. Nhưng tôi không nghĩ mọi người dường như có ý tưởng về bản sao một cách nghiêm túc nữa. –

Trả lời

26

Vâng, biểu thức lambda có hai điều chính trên phương pháp vô danh:

  • Họ có nhiều súc tích hơn phương pháp vô danh
  • Họ có thể được chuyển đổi sang expression trees cũng như các đại biểu

Trừ bạn đang sử dụng cây biểu thức, chúng rất giống với các phương thức ẩn danh. Sự khác biệt là thường bạn có thể viết một vài biểu thức lambda trong một câu lệnh (phương thức chuỗi gọi với nhau) mà không mất khả năng đọc, nhưng các phương thức nặc danh chỉ hơi quá dài dòng. Bằng cách này, nó không quá nhiều mà các biểu thức lambda là "chỉ cú pháp đường xung quanh các đại biểu vô danh" vì cả hai biểu thức lambda và các phương thức vô danh là "chỉ cú pháp đường quanh tạo đại biểu (và biểu hiện cây)."

Không giảm bớt cú pháp cú pháp - lợi ích của các chức năng ẩn danh đóng vai trò lớn, cùng với khả năng có mã đúng nơi bạn muốn, thay vì theo một phương pháp riêng.

+0

JABTW là từ viết tắt mới của tôi trong ngày - hơi quá dài dòng. Hoàn hảo cho các đánh giá mã. –

+0

+1 Mmmmmm ... biểu thức cây. –

+0

Vì vậy, biểu thức được sử dụng để tổng hợp các phương thức ẩn danh có thể được thu gọn cho mã thực hiện về cơ bản cũng như các phương thức được viết theo cách thủ công? –

14

Chúng có thể dễ dàng được sử dụng như đường cú pháp quanh đại biểu nhưng điều lớn nhất về lambdas là trình biên dịch có khả năng biến chúng thành expression trees, mở ra nhiều khả năng (ít nhất là LINQ).

+0

Trong khi đó là điều lớn về LINQ to SQL vv, cá nhân tôi sử dụng thực tế là họ đang terser thường xuyên hơn tôi sử dụng cây biểu hiện ... –

+0

Tôi cũng - nhưng tôi nghĩ rằng không có cây biểu thức và LINQ C# nhóm sẽ ít có khuynh hướng thêm các biểu thức lambda vào ngôn ngữ chỉ vì lợi ích của một mình :) –

4

Có một cú pháp rất ngắn gọn khiến nhiều khả năng nhiều thứ hơn sẽ được xây dựng xung quanh chúng. Hãy tưởng tượng một truy vấn LINQ phức tạp mà không có bất kỳ loại đường cú pháp nào.

+0

Tôi sợ tôi không làm LINQ. Tôi đang mắc kẹt trong C# 2.0 cho bây giờ, Vì vậy, tôi không thể tưởng tượng điều đó. Dù sao cũng cảm ơn bạn. – raven

4

Chúng chỉ là đường cú pháp xung quanh đại biểu ẩn danh hoặc có thứ gì đó mà tôi không thể nhìn thấy?

Tốt câu hỏi. Câu trả lời rất phức tạp. Trước hết, cây biểu hiện rõ ràng là cây lớn. Nhưng cũng có một số sự tinh tế. Dưới đây là năm rườm rà và thường xuyên điều digressing của tôi về vấn đề như thế nào lambdas là tinh tế khác biệt so với phương pháp vô danh:

http://blogs.msdn.com/ericlippert/archive/2007/01/10/lambda-expressions-vs-anonymous-methods-part-one.aspx

http://blogs.msdn.com/ericlippert/archive/2007/01/11/lambda-expressions-vs-anonymous-methods-part-two.aspx

http://blogs.msdn.com/ericlippert/archive/2007/01/12/lambda-expressions-vs-anonymous-methods-part-three.aspx

http://blogs.msdn.com/ericlippert/archive/2007/03/26/lambda-expressions-vs-anonymous-methods-part-four.aspx

http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx

Tất cả bài viết của tôi về các vấn đề liên quan đến biểu thức lambda được lưu trữ ở đây:

http://blogs.msdn.com/ericlippert/archive/tags/Lambda+Expressions/default.aspx

Các vấn đề liên quan