首页 > 代码库 > C# 表达式树学习笔记
C# 表达式树学习笔记
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Linq.Expressions;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ /// <summary> /// 动态表达式树 /// </summary> public partial class Form1 : Form { class aa { public string test { get; set; } } public Form1() { InitializeComponent(); } /// <summary> /// 示例地址: http://www.cnblogs.com/feichexia/archive/2013/05/28/3104832.html /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { //A. //aa a1 = new aa (); //typeof(aa).GetProperty("test").SetValue(a1, "test2", null); //B.MessageBox.Show(a1.test); //ParameterExpression p1 = Expression.Parameter(typeof(int), "a"); //ParameterExpression p2 = Expression.Parameter(typeof(int), "b") ; //BinaryExpression binaryExpress = Expression.Multiply(p1, p2); //var func = Expression.Lambda<Func<int, int, int>>(binaryExpress, new ParameterExpression[] { p1, p2 }).Compile(); //MessageBox.Show(func(10, 20).ToString()); //C. Expression.Property(origParam, prop) ParameterExpression p1 = Expression.Parameter(typeof(aa), "a"); var s = typeof(aa).GetProperties(); var s1 = s.ToArray()[0]; MemberExpression member = Expression.Property(p1, s1.Name) ; //1 // var fun = (Func<aa, string>)Expression.Lambda(member, p1).Compile(); //or var fun = Expression.Lambda<Func<aa, string>>(member, p1).Compile(); MessageBox.Show(fun(new aa() { test = "abc" })); //or MessageBox.Show(fun.DynamicInvoke(new aa() { test = "abc" }).ToString()); } }}
C# 表达式树学习笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。