2012-01-07 34 views
10

Tôi mới vào trường LINQ này và một điều đang cố gắng thực hiện.Làm cách nào để kết hợp nhiều câu lệnh trong biểu thức lambda

Tôi có một đại biểu hành động (được viết bên dưới) mà tôi muốn chuyển đổi trong biểu thức lambda.

 Action<string> custom = delegate(string name) 
      { 
       lstCutomers.Add(new Customer(name, coutries[cnt])); 
       name = name + " Object Created"; 
      }; 

Biểu thức lambda sẽ giống nhau. Tôi chỉ muốn biết rằng tôi có thể viết nhiều câu trong lambda nếu không thì tại sao?

Xin cảm ơn trước.

+0

có bạn có thể viết một câu lệnh hoặc một khối tuyên bố – Peeyush

+0

Kiểm tra: http://stackoverflow.com/questions/299703/delegate-keyword-vs- lambda-ký hiệu cho một cuộc thảo luận được giải nén về ký hiệu đại biểu Vs Lambda ký hiệu. –

+0

Bạn nhận ra rằng việc gán một giá trị trở lại 'tên' sẽ không có hiệu lực, phải không? Vì vậy, câu lệnh thứ hai của bạn không liên quan, và bạn có thể sử dụng một lambda không tuyên bố. Hoặc bạn đã đưa ra một ví dụ xấu hoặc có thể bạn đã gặp lỗi trong mã của mình ... –

Trả lời

18

Bạn không thể tạo biểu thức lambda vì bạn không trả lại bất kỳ thứ gì. Tuy nhiên bạn có thể tạo một tuyên bố lambda:

Action<string> custom = (name) => 
     { 
      lstCutomers.Add(new Customer(name, coutries[cnt])); 
      name = name + " Object Created"; 
     }; 
+0

sẽ là phương thức ẩn danh. Nó phải giống như Hành động customLambda = (tên) => lstCutomers.Add (Khách hàng mới (tên, coutries [cnt]); name = name + "Object Created";); Không biên dịch ngay cả. –

+0

Không chắc chắn, vì 'Biểu thức' luôn kết thúc bằng một giá trị. Tôi nghĩ rằng '=>' làm cho nó một biểu thức lambda (được chuyển đổi thành một phương thức nặc danh vì kiểu tùy chỉnh). –

+1

@DJ: Từ [MSDN] (http://msdn.microsoft.com/en-us/library/bb397687.aspx) 'Một biểu thức lambda là một hàm ẩn danh có thể chứa các biểu thức và câu lệnh', xem phần trên Tuyên bố Lambdas. Đã cập nhật câu trả lời của tôi. –

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