Expression<Action<int>> actionExpression = n => Console.WriteLine(n); Expression<Func<int, bool>> funcExpression1 = (n) => n < 0; Expression<Func<int, int, bool>> funcExpression2 = (n, m) => n - m == 0;
//通过 Expression 类创建表达式树 // lambda:num => num == 0 ParameterExpression pExpression = Expression.Parameter(typeof(int)); //参数:num ConstantExpression cExpression = Expression.Constant(0); //常量:0 BinaryExpression bExpression = Expression.MakeBinary(ExpressionType.Equal, pExpression, cExpression); //表达式:num == 0 Expression<Func<int, bool>> lambda = Expression.Lambda<Func<int, bool>>(bExpression, pExpression); //lambda 表达式:num => num == 0
Expression<Func<int, bool>> funcExpression = num => num == 0;
//开始解析
ParameterExpression pExpression = funcExpression.Parameters[0]; //lambda 表达式参数
BinaryExpression body = (BinaryExpression)funcExpression.Body; //lambda 表达式主体:num == 0
Console.WriteLine($"解析:{pExpression.Name} => {body.Left} {body.NodeType} {body.Right}");
//创建表达式树
Expression<Func<string, int>> funcExpression = msg => msg.Length;
//表达式树编译成委托
var lambda = funcExpression.Compile();
//调用委托
Console.WriteLine(lambda("Hello, World!"));
//语法简化
Console.WriteLine(funcExpression.Compile()("Hello, World!"));
const int n = 1;
const int m = 2;
//待执行的表达式树
BinaryExpression bExpression = Expression.Add(Expression.Constant(n), Expression.Constant(m));
//创建 lambda 表达式
Expression<Func<int>> funcExpression = Expression.Lambda<Func<int>>(bExpression);
//编译 lambda 表达式
Func<int> func = funcExpression.Compile();
//执行 lambda 表达式
Console.WriteLine($"{n} + {m} = {func()}");
internal class Program
{
private static void Main(string[] args)
{
Expression<Func<int, bool>> funcExpression = num => num == 0;
Console.WriteLine($"Source: {funcExpression}");
var visitor = new NotEqualExpressionVisitor();
var expression = visitor.Visit(funcExpression);
Console.WriteLine($"Modify: {expression}");
Console.Read();
}
/// <summary>
/// 不等表达式树访问器
/// </summary>
public class NotEqualExpressionVisitor : ExpressionVisitor
{
public Expression Visit(BinaryExpression node)
{
return VisitBinary(node);
}
protected override Expression VisitBinary(BinaryExpression node)
{
return node.NodeType == ExpressionType.Equal
? Expression.MakeBinary(ExpressionType.NotEqual, node.Left, node.Right) //重新弄个表达式:用 != 代替 ==
: base.VisitBinary(node);
}
}
}
ParameterExpression pExpression1 = Expression.Parameter(typeof(string)); ParameterExpression pExpression2 = Expression.Parameter(typeof(string), "msg");
const int num1 = 250; const float num2 = 250; ConstantExpression cExpression1 = Expression.Constant(num1); ConstantExpression cExpression2 = Expression.Constant(num2);
Expression lambda1 = Expression.Lambda<Func<int>>(Expression.Constant(250)); Expression lambda2 = Expression.Lambda<Func<int>>(Expression.Constant(250), "CustomName", null);
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有