重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“MethodCallExpression和Expression.Compile()正确的使用方法”,在日常操作中,相信很多人在MethodCallExpression和Expression.Compile()正确的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MethodCallExpression和Expression.Compile()正确的使用方法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联是一家专业提供眉山企业网站建设,专注与网站制作、网站建设、H5场景定制、小程序制作等业务。10年已为眉山众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
Expression
//LambdaExpression lbda = Expression.Lambda
//var lbdadel = lbda.Compile();
//Console.WriteLine("Expression
//结果运行时发现:
//var lbdadel = lbda.Compile();这一句出现:System.InvalidoperationException类型的未经处理的异常在System.Core.dll中发生
//其他信息:从作用域""引用了"System.Int32"类型的变量"ep",但该变量未定义
//其实这样将Expression
//因为Expression
//的Compile()直接进行编译才是正确的做法
var lbdadel = expmethod.Compile();
Console.WriteLine("Expression
以上作法是针对Expression
class ClassMethodCallExpression:IMethodCallExpression
{
public int methodfun(int arg) //接口中的方法的实现
{
return arg + 5;
}
}
IMethodCallExpression imce = new ClassMethodCallExpression();
//Func
//MethodInfo无法new出来对象,怎么创建一个MethodInfo呢???
MethodInfo mi = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) });
ConstantExpression ce = Expression.Constant("3");
MethodCallExpression mce = Expression.Call(mi, ce);//针对静态方法
Action a = Expression.Lambda
a();//也就是Console.WriteLine方法的执行
MethodInfo mi2 = typeof(ClassMethodCallExpression).GetMethod("methodfun",new Type[]{typeof(int)});
ConstantExpression ce2 = Expression.Constant(5);
MethodCallExpression mce2 = Expression.Call(Expression.Constant(imce),mi2, ce2);//针对非静态方法
//Expression.Call方法中,无Expression instance则表示将调用的是静态方法
//当MehtodCallExpression准备调用实例方法时,可以通过Expression.Constant(实例对象变量)创建ConstantExpression,然后将这个ConstantExpression当作instance传参
//具体以及更复杂的例子参考 https://blog.csdn.net/weixin_34402090/article/details/85786004
// MethodCallExpression Expression.Call(Expression instance,MehtodInfo,params Expression[] arguments)或者
//Expression.Call(MehtodInfo,params Expression[])
var a2 = Expression.Lambda
//MethodCallExpression使用步骤(如果是静态方法当然不需要目标对象变量)
//1:定义好要用到的目标对象变量(因为最终要执行的方法在它所属的类中)
//2:定义好要用到的参数表达式或常量表达式等
//3:通过typeof(目标对象所在的类).GetMethod获得MethodInfo
//4:利用Expression.Lambda
//也就是说不能Expression.Lambda(...),必须要用Expression.Lambda
Console.WriteLine("a2=" + a2());
到此,关于“MethodCallExpression和Expression.Compile()正确的使用方法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!