Đây là lần đầu tiên tôi thực sự xử lý cây biểu thức và tôi đã mất một chút. Tôi xin lỗi nếu câu hỏi này không có ý nghĩa gì cả. Hãy xem xét các loại sau đây:Thêm một nút/thuộc tính vào một cây biểu hiện
public class Foo<T> {
public T Value { get; set; }
public bool Update { get; set;}
}
public class Bar {
public Foo<bool> SomeBool { get; set; }
public Foo<string> SomeString { get; set; }
}
Vì vậy, ngay bây giờ tôi có một phương pháp helper trông như thế này:
public void Helper<T>(Expression<Func<Bar, Foo<T>>> baseExpression, Expression<Func<Bar, T>> valExpression, Expression<Func<Bar, bool>> updateExpression)
{
// Do some stuff with those expressions.
}
Và sau đó nó được gọi như thế này:
Helper(b=>b.SomeBool,b=>b.SomeBool.Value,b=>b.SomeBool.Update);
Nhưng tôi không thích xây dựng ba biểu thức gần giống hệt nhau và phải chuyển rõ ràng chúng vào Trình trợ giúp. Những gì tôi muốn là một cái gì đó như thế này:
Helper(b=>b.SomeBool);
Và sau đó:
public void Helper<T>(Expression<Func<Bar, Foo<T>>> baseExpression)
{
// Do some stuff
var valExpression = ???; // append `.Value` to baseExpression
var updateExpression = ???; // append `.Update` to baseExpression
}
Nhưng tôi không thực sự chắc chắn làm thế nào để làm điều đó ... boggling của tâm trí của tôi, bất kỳ xô trong hướng chính xác sẽ được đánh giá cao.