Tôi đang học cây biểu thức trong C#.Cây biến thể và biểu thức cục bộ
Tôi đang bị mắc kẹt tại một thời gian:
string filterString = "ruby";
Expression<Func<string, bool>> expression = x => x == filterString;
Làm thế nào tôi có thể xây dựng biểu thức này bằng cách mã? Không có mẫu làm thế nào để nắm bắt một biến địa phương. Cái này rất dễ dàng:
Expression<Func<string, bool>> expression = x => x == "ruby";
này sẽ là:
ParameterExpression stringParam = Expression.Parameter(typeof(string), "x");
Expression constant = Expression.Constant("ruby");
BinaryExpression equals = Expression.Equal(stringParam, constant);
Expression<Func<string, bool>> lambda1 =
Expression.Lambda<Func<string, bool>>(
equals,
new ParameterExpression[] { stringParam });
Các bản in debugger sau for (x => x == filterString):
{x => (x == giá trị (Predicate.Program + <> c__DisplayClass3) .filterString)}
Cảm ơn bạn đã tiết lộ một số ánh sáng về chủ đề này.
Cảm ơn. Các gợi ý để xem xét mã MSIL được tạo ra là rất hữu ích. – yonexbat
Giống như 'var hoistedConstant = Expression.Property (Expression.Constant (new {Value = filterString})," Value ");' nên làm điều đó – Appetere
@Appetere Còn 'Expression.Constant (filterString)' thì sao? Phải thừa nhận rằng, nó sẽ không phản ánh các thay đổi đối với biến, nhưng cũng không phải đề xuất của bạn. –