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());

        }
    }
}
时间: 2024-10-20 07:39:36

C# 表达式树学习笔记的相关文章

线段树学习笔记

线段树学习笔记 20180112 http://www.cnblogs.com/wuyuanyuan/p/8277100.html 一定要明确需要维护的值(区间最大值.区间和--). 原文地址:https://www.cnblogs.com/wuyuanyuan/p/8278004.html

支配树学习笔记

支配树(dominator tree) 学习笔记 学习背景 本来本蒟蒻都不知道有一个东西叫支配树……pkuwc前查某位的水表看见它的大名,甚感恐慌啊.不过好在pkuwc5道题(嗯?)都是概率期望计数,也不知是好还是不好,我在这些方面也只是不好不差……扯远了. 考挂之后也没什么心思干别的,想起支配树这个东西,于是打算学一下. 技能介绍(雾) 支配树是什么?不如直接讲支配树的性质,从性质分析它的定义. 先大概讲一下它是来求什么的. 问题:我们有一个有向图(可以有环),定下了一个节点为起点s.现在我们

Expression 表达式树学习整理

整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的来吧  它表示具有常量值的表达式 我们选建一个控制台应用程序 ConstantExpression _constExp = Expression.Constant("aaa",typeof(string));//一个常量 //Console.Writeline("aaa"); MethodCallExpression _methodCallexp=Expression.

哈夫曼树学习笔记

既然我们要学习赫夫曼树,那么我们首先就要知道什么叫赫夫曼树. 那么什么叫赫夫曼树呢? 一.什么叫赫夫曼树? 书上说:“赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,但是我们仅学习最优二叉树.” 看到这个还是不明白什么意思,因此在学习之前我们要结合这个图了解几个基本概念. 路    径:由一结点到另一结点间的分支所构成.如:a->b a->b->e 路径长度:路径上的分支数目,如:a→e的路径长度=2  a->c的路径长度=1 树的路径长度:从树根到每一结点的路径

Splay伸展树学习笔记

Splay伸展树 有篇Splay入门必看文章 —— CSDN链接 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 创造者:Daniel Sleator 和 Robert Tarjan 优点:每次查询会调整树的结构,使被查询频率高的条目更靠近树根. Tree Rotation 树的旋转是splay的基础,对于二叉查找树来说,树的旋转不破坏查找树的结构. Splaying Splaying是Splay Tree中的基本操作,为了让被查询的条目更接近树根,Splay Tree

CART分类与回归树 学习笔记

CART:Classification and regression tree,分类与回归树.(是二叉树) CART是决策树的一种,主要由特征选择,树的生成和剪枝三部分组成.它主要用来处理分类和回归问题,下面对分别对其进行介绍. 1.回归树:使用平方误差最小准则 训练集为:D={(x1,y1), (x2,y2), …, (xn,yn)}. 输出Y为连续变量,将输入划分为M个区域,分别为R1,R2,…,RM,每个区域的输出值分别为:c1,c2,…,cm则回归树模型可表示为: 则平方误差为: 假如使

Jsp入门EL表达式_学习笔记

1.EL表达式 [1] 简介 > JSP表达式 <%= %> 用于向页面中输出一个对象. > 到JSP2.0时,在我们的页面中不允许出现 JSP表达式和 脚本片段. > 使用EL表达式来代替JSP表达式 ,使用标签来代替脚本片段. > EL表达式用来向页面输出内容 [2] 基本语法 > ${表达式} > EL表达式可以从域中获取属性. - 使用 ${属性名} - 如果只填写一个属性名,EL表达式会自动做全域查找. - 所谓的全域查找,就是按照page req

AVL树 - 学习笔记

2017-08-29 14:35:55 writer:pprp AVL树就是带有平衡条件的二叉查找树.每个节点的左子树和右子树高度相差最多为1的二叉查找树 空树的高度定为-1 对树的修正称为旋转 对内部的来说是双旋,对外部的调整修正是单旋 ---------------------------------------------------------------------------------------------------------------- 由于一次旋转总能解决问题,因此编写

左偏树 学习笔记

左偏树(Leftist Tree)是一种可并堆的实现.左偏树是一棵二叉树,它的节点除了和二叉树的节点一样具有左右子树指针( left, right)外,还有两个属性,键值和距离(dist). 键值:是用于比较节点的大小. 距离:节点i称为外节点(external node),当且仅当节点i的左子树或右子树为空 ( left(i) = NULL或right(i) = NULL ):节点i称为外节点(external node),当且仅当节点i的左子树或右子树为空 ( left(i) = NULL或