系列文章: C# 表达式树及其应用 (Expression 类)
本节继续讲解Expression相关的API, 力争把相关api 都使用简短demo说明一下
- Multiply 创建一个表示不进行溢出检查的算术乘法运算的 BinaryExpression。
//Or 创建一个表示按位 BinaryExpression 运算的 OR。
void OrSample()
{
Expression orExpr = Expression.Or(Expression.Constant(true), Expression.Constant(false));
orExpr.ToString().Dump("OrExpr");//(True Or False)
Expression.Lambda<Func<bool>>(orExpr).Compile()().Dump("Or");//True
}
OrSample();
- OrAssign 创建一个表示按位 OR 赋值运算的 BinaryExpression。
//OrAssign 创建一个表示按位 OR 赋值运算的 BinaryExpression。
void OrAssignSample()
{
ParameterExpression variableExpr = Expression.Variable(typeof(bool), "sampleVar");
BlockExpression block = Expression.Block(
new ParameterExpression[] { variableExpr },
Expression.Assign(variableExpr, Expression.Constant(true)),
Expression.OrAssign(
variableExpr,
Expression.Constant(false)
)
);
block.Expressions.ForEach(p => p.ToString().Dump());//(sampleVar = True) | (sampleVar ||= False)
Expression.Lambda<Func<bool>>(block).Compile()().Dump("OrAssign 按位Or赋值运算");//True
}
OrAssignSample();
- OrElse 创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 OR 时才计算第二个操作数的条件 false 运算。
//OrElse 创建一个 BinaryExpression,它表示仅在第一个操作数的计算结果为 OR 时才计算第二个操作数的条件 false 运算。
void OrElseSample()
{
Expression orElseExpr = Expression.OrElse(
Expression.Constant(false),
Expression.Constant(true)
);
orElseExpr.ToString().Dump("OrElse");//(False OrElse True)
Expression.Lambda<Func<bool>>(orElseExpr).Compile().Invoke().Dump("OrElse");//true
}
OrElseSample();
- Parameter 创建一个 ParameterExpression 节点,该节点可用于标识表达式树中的参数或变量。
//Parameter 创建一个 ParameterExpression 节点,该节点可用于标识表达式树中的参数或变量。
void ParameterSample()
{
ParameterExpression param = Expression.Parameter(typeof(int));
MethodCallExpression methodCall = Expression.Call(
typeof(Console).GetMethod("WriteLine", new Type[] { typeof(int) })!,
param
);
Expression.Lambda<Action<int>>(
methodCall,
new ParameterExpression[] { param }
).Compile()(10);//10
}
ParameterSample();
本文作者:wwmin
微信公众号: DotNet技术说
本文链接:https://www.jianshu.com/p/d0cc14f43399
关于博主:评论和私信会在第一时间回复。或者[直接私信]我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,关注点赞, 您的鼓励是博主的最大动力!
网友评论