系列文章: C# 表达式树及其应用 (Expression 类)
本节继续讲解Expression相关的API, 力争把相关api 都使用简短demo说明一下
- Add(Expression, Expression) 创建一个表示不进行溢出检查的算术加法运算的
public class Plus
{
//下面表达式指定加法的实现
public static int AddOne(int a, int b)
{
return a + b + 1;
}
}
//Add(Expression, Expression) 创建一个表示不进行溢出检查的算术加法运算的 BinaryExpression。
void AddSample()
{
Expression sumExpr = Expression.Add(Expression.Constant(1), Expression.Constant(2));
Console.WriteLine(sumExpr.ToString());//(1+2)
Console.WriteLine(Expression.Lambda<Func<int>>(sumExpr).Compile()());//3
Expression sumExpr2 = Expression.Add(Expression.Constant(1), Expression.Constant(2), typeof(Plus).GetMethod("AddOne"));
Console.WriteLine(sumExpr2.ToString());
Console.WriteLine(Expression.Lambda<Func<int>>(sumExpr2).Compile()());
}
AddSample();
- AddAssign(Expression, Expression) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression
//AddAssign(Expression, Expression) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression
void AddAssignSample()
{
ParameterExpression variableExpr = Expression.Variable(typeof(int), "sampleVar");//the parameter expression is used to create a variable;
BlockExpression addAssignExpr = Expression.Block(
new ParameterExpression[] { variableExpr },
Expression.Assign(variableExpr, Expression.Constant(1)),
Expression.AddAssign(
variableExpr,
Expression.Constant(2)
)
);
addAssignExpr.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = 1),(sampleVar +=2)
Console.WriteLine(Expression.Lambda<Func<int>>(addAssignExpr).Compile()());//3
}
AddAssignSample();
- AddAssign(Expression, Expression, MethodInfo) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression。可指定实现
//AddAssign(Expression, Expression, MethodInfo) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression。可指定实现
//参Add(Expression, Expression, MethodInfo)
//AddAssign(Expression, Expression, MethodInfo, LambdaExpression) 创建一个表示不进行溢出检查的加法赋值运算的 BinaryExpression。可指定实现, 可指定类型转换函数
- AddAssignChecked(Expression, Expression) 创建一个表示进行溢出检查的加法赋值运算的 BinaryExpression。
//AddAssignChecked(Expression, Expression) 创建一个表示进行溢出检查的加法赋值运算的 BinaryExpression。
void AddAssignCheckedSample()
{
ParameterExpression variableExprWithChecked = Expression.Variable(typeof(int), "sampleVar");//the parameter expression is used to create a variable;
BlockExpression addAssignExprWithChecked = Expression.Block(
new ParameterExpression[] { variableExprWithChecked },
Expression.Assign(variableExprWithChecked, Expression.Constant(2147483647)),
Expression.AddAssign(
variableExprWithChecked,
Expression.Constant(1)
)
);
addAssignExprWithChecked.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = 2147483647),(sampleVar +=1)
Console.WriteLine(Expression.Lambda<Func<int>>(addAssignExprWithChecked).Compile()());//-2147483648
}
AddAssignCheckedSample();
//AddChecked(Expression, Expression) 创建一个表示进行溢出检查的算术加法运算的 BinaryExpression。
//同Add
本文作者:wwmin
微信公众号: DotNet技术说
本文链接://www.greatytc.com/p/e8dc272b7bf4
关于博主:评论和私信会在第一时间回复。或者[直接私信]我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!