C#利用Lambda表达式树简化函数调用
2014-02-17 16:44
183 查看
没有使用表达式树的代码:
GetGroupSetUpParameters返回的是一个IList<XElement>类型, 注意上面不止一次的调用了GetGroupSetUpParameters,但每次都传入一个一样的参数formulaElements
下面使用表达式树来简化这个函数调用
但有一个参数是一样的,就是formulaElements!如果只调用一次这个函数还好,但是如果多次调用,就让人感到很累赘了,这个时候可以用表达式树简化,去掉一个参数
注意下面两行代码
你甚至可以写成
//公式参数名称 var parameterNameGroup = GetGroupSetUpParameters(formulaElements, "ParameterNameGroup"); //公式参数范围 var parameterRange = GetGroupSetUpParameters(formulaElements, "ParameterRange"); //公式图片 var image = GetGroupSetUpParameters(formulaElements, "Image");
GetGroupSetUpParameters返回的是一个IList<XElement>类型, 注意上面不止一次的调用了GetGroupSetUpParameters,但每次都传入一个一样的参数formulaElements
下面使用表达式树来简化这个函数调用
Expression<Func<string, IList<XAttribute>>> ex = name => GetGroupSetUpParameters(formulaElements, name); var funcGetParameters = ex.Compile(); //公式参数名称 var parameterNameGroup = funcGetParameters("ParameterNameGroup"); //公式参数范围 var parameterRange = funcGetParameters("ParameterRange"); //检查参数合法性 var validParameter = funcGetParameters("ValidParameter");注意看上面的修改,修改之前,需要调用的函数(GetGroupSetUpParameters)每次都是传两个参数,
但有一个参数是一样的,就是formulaElements!如果只调用一次这个函数还好,但是如果多次调用,就让人感到很累赘了,这个时候可以用表达式树简化,去掉一个参数
注意下面两行代码
Expression<Func<string, IList<XAttribute>>> ex = name => GetGroupSetUpParameters(formulaElements, name); var funcGetParameters = ex.Compile();funcGetParameters就是最终编译(典型的动态编程特征)表达式树后,形成的该表达式的委托.可以看到,这个表达式树的构造是一个代码可控的过程(也就是说,可以动态构建)
你甚至可以写成
Expression<Func<string, IList<XAttribute>>> ex = null; if (xxxx == true) ex = name => SomeMethod1(formulaElements, name); else ex = name => SomeMethod2(formulaElements, name);这样就是依据条件来生成一个内部实现不同的委托,是不是很神奇?
相关文章推荐
- c#利用委托跨线程调用UI控件完整使用方法
- 利用c#实现dll动态库,并在c++中调用的方法
- C#中利用process类调用外部程序以及执行dos命令
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务
- Xilium.CefGlue利用XHR实现Js调用c#方法
- C#利用反射在debug状态下获取调用代码所在文件及行信息
- C# 利用JQuery调用后台方法
- C# 如何利用反射来加载程序集,并调用程序集中有关类的方法【转】
- C#中winform下利用ArcEngine调用ArcGIS Server发布的服务(转未测试)
- 利用sender的Parent获取GridView中的当前行 不用AJAX实现前台JS调用后台C#方法(小技巧) AjaxControlToolkit的CalendarExtender的本地化
- java调用.net(c#) dll(利用jacob)
- c#调用exe文件利用.bat文件
- 【经典实例】利用C#反射动态编译代码,创建类的实例,并调用其成员
- C#中利用process类调用外部程序以及执行dos命令
- C#利用HttpWebRequest、HttpWebResponse调用12306接口,实现登录、查票、买票。
- 利用C#调用WINRAR实现压缩与解压
- C#中利用Process类调用外部程序以及执行dos命令
- C# 利用JQuery调用后台方法
- .NET/C#利用反射调用含ref或out参数的方法示例代码
- C#控制台基础 activator与invoke,利用反射调用一个类的无参数方法