Hãy nói rằng tôi có một biểu hiện như thế này:Thay đổi tên tham số trong một LambdaExpression chỉ để trưng bày
Expression<Predicate<T>> exp
Nếu tôi gán biểu thức sau đây:
a => a.First() != 0
và sau đó tôi gọi exp.ToString()
tôi sẽ có được chính xác biểu thức tôi đã vượt qua, điều đó hoàn toàn tốt, nhưng, giả sử chúng ta muốn thay đổi tên chúng ta sử dụng cho 'a' bằng cái gì đó khác, làm sao chúng ta có thể làm được? Thay thế chuỗi sẽ không làm trong mọi trường hợp (nó hoạt động trong ví dụ trên, nhưng nếu tham số được gọi là 'i' chẳng hạn?) Có thể chỉ thay thế tên tham số, thời gian chạy, mà không ảnh hưởng đến ngữ nghĩa biểu thức?
CẬP NHẬT Các @PhilKlein hoạt động hoàn hảo, nhưng đòi hỏi khuôn khổ 4. Nhưng nếu chúng ta cần hướng đến các framework 3.5 chúng ta có thể sử dụng một lớp ExpressionVisitor từ Matt Warren, bởi chỉ modifing từ bảo vệ cho công chúng Visit phương pháp.
Tôi không hiểu tại sao bạn muốn xuất ra một chuỗi biểu thị biểu thức mà nó không khớp chính xác với biểu thức. Tại sao bạn muốn làm nó? Tại sao * không * bạn muốn cấu trúc lại mã - tại sao nó phải xảy ra trong thời gian chạy? –
@KirkWoll Tôi đang sử dụng biểu thức lambda làm siêu dữ liệu. Trong ngữ cảnh biểu thức được tạo ra, argumet có thể khác với cái tôi muốn hiển thị cho người dùng ở một điểm khác trong mã. Toàn bộ dự án nhỏ là một thư viện xác nhận đối số không sử dụng chuỗi phép thuật để hiển thị lỗi. –