Bằng cách lưu trữ một lambda như một đại biểu, bạn đang lưu trữ một trường hợp cụ thể của một đại biểu thực hiện một số hành động. Nó không thể được sửa đổi, bạn chỉ cần gọi nó. Một khi bạn có đại biểu của bạn, bạn có các tùy chọn hạn chế trong việc kiểm tra những gì nó làm và không có gì.
Bằng cách lưu trữ lambda làm biểu thức, bạn đang lưu trữ cây biểu thị đại diện cho đại biểu. Nó có thể được thao tác để làm những việc khác như thay đổi các tham số của nó, thay đổi cơ thể và làm cho nó làm điều gì đó hoàn toàn khác biệt. Nó thậm chí có thể được biên dịch lại cho một đại biểu để bạn có thể gọi nó nếu bạn muốn. Bạn có thể dễ dàng kiểm tra biểu thức để xem các thông số của nó là gì, nó hoạt động như thế nào và nó hoạt động như thế nào. Đây là điều mà một nhà cung cấp truy vấn có thể sử dụng để hiểu và dịch một biểu thức sang một ngôn ngữ khác (chẳng hạn như viết một truy vấn SQL cho một cây biểu thức tương ứng).
Cũng dễ dàng hơn cả việc tạo đại biểu động bằng cách sử dụng biểu thức hơn là phát ra mã. Bạn có thể nghĩ mã của bạn ở mức cao hơn như các biểu thức rất giống với cách trình biên dịch xem mã thay vì đi mức thấp và xem mã của bạn như là các chỉ dẫn IL.
Vì vậy, với biểu thức, bạn có thể làm được nhiều hơn một đại biểu ẩn danh đơn giản. Mặc dù nó không thực sự miễn phí, hiệu suất sẽ mất một hit nếu bạn chạy biểu thức biên dịch so với một phương pháp thông thường hoặc một đại biểu vô danh. Nhưng đó có thể không phải là vấn đề vì lợi ích khác của việc sử dụng các biểu thức có thể quan trọng đối với bạn.
Nguồn
2011-10-14 10:02:46
Điều này làm rõ nó hoàn hảo cho tôi, cảm ơn rất nhiều :-) – Steffen