Có một lý do rất tốt cho việc bạn không thể làm điều này. Lý do đơn giản là chi phí. Chi phí cho phép tính năng này trong C# (hoặc VB) là cực kỳ cao.
Chỉnh sửa hàm lambda là một trường hợp cụ thể của một lớp các vấn đề ENC rất khó giải quyết với kiến trúc ENC (Edit'n'Continue) hiện tại. Cụ thể, nó rất khó để ENC bất kỳ phương pháp mà nơi ENC làm một trong các cách sau: -
- Tạo Metadata dưới hình thức của một lớp
- chỉnh sửa hoặc tạo ra một phương pháp chung
Các vấn đề đầu tiên là nhiều ràng buộc về logic hơn nhưng nó cũng va chạm vào một vài hạn chế trong kiến trúc ENC. Cụ thể là vấn đề đang tạo ra lớp học đầu tiên không phải là quá khó khăn. Điều khó chịu là tạo ra lớp học sau lần chỉnh sửa thứ hai. Động cơ ENC phải bắt đầu theo dõi bảng biểu tượng không chỉ cho mã trực tiếp, mà cả các lớp được tạo ra nữa. Thông thường điều này không quá tệ, nhưng điều này trở nên ngày càng khó khăn khi hình dạng của một lớp được tạo ra dựa trên ngữ cảnh mà nó được sử dụng (như trường hợp với lambdas vì các bao đóng). Quan trọng hơn, làm thế nào để bạn giải quyết sự khác biệt đối với các cá thể của các lớp đã tồn tại trong tiến trình?
Vấn đề thứ hai là hạn chế nghiêm ngặt trong kiến trúc CLR ENC. Không có gì mà C# (hoặc VB) có thể làm để giải quyết vấn đề này.
Lambdas không may xảy ra cả hai vấn đề này. Các phiên bản ngắn là ENC'ing một lambda liên quan đến rất nhiều đột biến trên các lớp học hiện tại (có thể hoặc có thể không được tạo ra từ các ENC khác). Vấn đề lớn xảy ra trong việc giải quyết sự khác biệt giữa mã mới và các cá thể đóng hiện có đang tồn tại trong không gian quy trình hiện tại. Ngoài ra, lambdas có xu hướng sử dụng generics nhiều hơn so với mã khác và nhấn vấn đề # 2.
Chi tiết rất đẹp và một chút quá liên quan đến câu trả lời SO bình thường. Tôi đã xem xét việc viết một bài đăng blog dài về đề tài này. Nếu tôi đi xung quanh nó, tôi sẽ liên kết nó trở lại câu trả lời cụ thể này.
Thẳng từ miệng ngựa. +1 –
@Jon Chúng tôi đã có nhiều cuộc họp nội bộ về chủ đề này và tôi đã phải trình bày bài này nhiều lần. Tôi thực sự cần phải viết một tài liệu đầy đủ về chủ đề này. Viết blog có vẻ như là một nơi tốt cho nó. Hy vọng rằng điều này sẽ được giải quyết trong một phiên bản tương lai của VS. – JaredPar
Hãy viết một blog về nó. – Eyvind