- 博客(21)
- 收藏
- 关注
原创 用dnlib合并两个dll内的同名类
在实际工作中有时会碰到需要修改某个dll里某个类的方法但是又没有该dll的所有工程项目的情况,而此时只要手头有目标类的相关代码并且能新编译出一个仅包含目标类的dll,就能通过在2个dll上操作把新的类替换掉原先那个类,而不需重新编译整个工程。当然更进一步,还可以做到只替换某个类的某个方法,或是只修改某个方法的某一行代码。 现有一些工具比如reflexil已经可以做到这些,但是操作起来稍微麻烦了些,
2016-08-04 14:34:45 2595 1
原创 两种屏幕-世界坐标转换的性能比较
很早之前写过一篇《D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵》,是用解方程组方式逆推出世界坐标,当然一般做法是用Raycasting方法进行计算。 Raycasting思路大致是根据屏幕坐标反投影出两个空间坐标,一般可以取及最远点,这样就组成穿过viewport的一根射线,射线和viewport相交的点就是需要的空间坐标点。 因此在表示射线ray时就可以用近点及远点两个坐标表示,一
2016-04-07 11:54:36 1282
原创 D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵
D3D坐标系统下3D世界坐标映射到2D屏幕坐标的平移矩阵,有需要的朋友可以参考下。D3D中绘画3D模型基本上就是靠3个矩阵World, View, Projection来联合进行模型位置定位、视角定位及透视变形的,这与2D绘制一个图形只需要给出屏幕上的一个像素坐标就能进行定位有着非常大的不同。在某些场合,我们想根据屏幕上的像素坐标来绘制3D模型,一般可以通过用正交投影代替透视投影就能轻松进行绘制,但
2016-02-17 16:13:31 10367 3
原创 Lambda实参代入变换
这里要讲的lambda实参代入变换就是把实参表达式替换掉lambda里的形参表达式。举个例子:ExpressionFuncint, int, Funcint, int>>> e = (i, j) => x => x + i + j;lambda e接受2个参数,并返回一个相加的表达式。ExpressionFuncint, int>> p1 = x => x + 1;Expr
2012-01-06 15:41:27 1657
原创 表达式解析器添加dynamic访问及静态方法调用
最近碰到需要对一个匿名类的成员进行动态访问,从lambda上看就是类似Func f = o => o.Company这样的操作之前的解析器无法正常解析成表达式,因为o是object,通过反射没法得到Company,需要修改ProcessMemberAccessExpression这个方法来支持dynamic object,片段: if
2011-12-07 13:09:44 1433
原创 手工把LINQ转成表达式(六) join
join操作处理稍微复杂点,linq:from a in A join b in B on a equals b select a表达式:System.Int32[].Join(System.Int32[], a => a, b => b, (a, b
2011-08-22 11:17:31 1151
原创 手工把LINQ转成表达式(五) let
let语句的处理比较特殊,先看一个简单例子:int[] array = { 1, 3, 3 };IQueryable A = array.AsQueryable();var q = from a in A let i = a + 1
2011-08-22 11:16:19 864
原创 手工把LINQ转成表达式(四) select, group, where, orderby
select, group, where, orderby这4个语句比较简单,调用的扩展方法参数形式都近似,处理的方式都是先得到语句的表达式然后把上一个参数代入,调用相应的扩展方法,这里用一个统一的处理方法来进行处理: private Expression Ge
2011-08-22 10:38:05 1692
原创 手工把LINQ转成表达式(三) from
先来看这段查询 int[] array = { 1, 3, 3 }; IQueryable A = array.AsQueryable(); IQueryable B = array.AsQueryab
2011-08-18 16:25:47 806
原创 手工把LINQ转成表达式(二) 准备工作
先来看一句简单的LINQ语句:from item in Sourceselect item这里如果写成方法调用的话就是Source.Select(item => item)这意味着in后面的是作为方法调用的发起方(invoker) ,from是定义表达式参数,
2011-08-15 17:31:46 1060
原创 把匿名对象转换成成员名索引形式的动态对象
在用LINQ进行数据查询操作时,我们时不时的会碰到匿名对象,对匿名对象的操作有时候会很不方便比如var query = from row in table select new { Col1 = row.col1 };这时只在当前方法内用query的结果是没问题的,但如
2011-08-11 15:51:44 2663 1
原创 手工把LINQ转成表达式(一) 基础知识
LINQ其实并非是全新的概念,在编程语言中内嵌SQL或脚本进行强类型绑定查询很早就存在,LINQ之所以能让人觉得非常强大的地方在于它的设计框架可以让它不仅仅用在数据库查询方面,只要查询对象有IQueryableProvider你就可以通过LINQ去查找。比如假设有个googl
2011-08-09 14:46:54 1044
原创 集合的排列组合
在编程的时候有时会碰到需要得到一组集合的某种排列组合集,这里用穷举法来求解。using System;using System.Collections.Generic;using System.Linq;using System.Text;namespac
2011-08-09 13:54:13 1106
原创 lambda表达式的解析(八) 泛型调用及typeof操作
这篇是这个系列的最后一篇了,对于BlockExpression不再深入展开了,只对之前的泛型调用支持及typeof操作补漏。这次是进一步完善了grammar,现在能正常解析泛型调用及typeof操作,这使得我们能对这2种表达式进行正确的转换了。大家可以从http://tinyne
2011-08-09 11:33:33 4121
原创 lambda表达式的解析(七) 对象的创建
C#里用来创建对象的方式有以下几种调用构造函数 new obj(...)初始化成员列表 new obj { f1 = xxx, f2 = xxx, ... }创建数组 new arraytype[] { e1, e2, e3, ...}如果是匿名对象话,创建方式只
2011-08-04 16:47:06 6220
原创 lambda表达式的解析(六) 成员访问表达式
成员访问的解析稍微有点复杂,从字符串角度看,访问一个实例的成员有三种形式:访问成员字段或属性 instance.field instance.property访问索引器 instance[]访问方法 instance.method(...)在解析的时候就按这三种形
2011-08-03 17:24:35 6545
原创 lambda表达式的解析(五) Lambda表达式与闭包类型
在讲述如何解析转换成员访问表达式之前,先来讲一些预备知识。一个标准的lambda表达式应该是 ( 参数列表 ) => 表达式或表达式块 其中参数列表和方法的参数列表类似,不过lambda表达式更灵活,允许用的时候不用显示声明参数的类型甚至在一个参数的时候括号也可以不用
2011-08-02 14:51:17 2645
原创 lambda表达式的解析(四) 运算符表达式
一元、二元、三元操作符的转换大多都非常有规律,先看这个一元树:主要就是一个操作符跟一个表达式,转换起来很简单: private Expression ProcessUnaryExpression(ParseTreeNode expNode)
2011-08-01 15:02:54 3153
原创 lambda表达式的解析(三) 类型转换表达式
接 上篇的常量表达式的转换,接下来要讲的是怎么产生操作运算表达式。和C#通常意义上的3种操作符不同,我们的grammar把类型转换操作()从unary expression里拿出来独立成一个typecast_expression,也就是说要转换的操作符节点有4种。而且对于unar
2011-07-29 15:55:58 7804
原创 lambda表达式的解析(二) 常量表达式
在继续探讨如何生成Expression前先对委托和表达式关系做下简单介绍,方便更好的理解后面的内容。.net提供的Expression涵盖的表达式范围很大,从一般的含操作符表达式到带语句的表达式都支持,比如像if, foreach, try ... catch这些都可以成为表达式
2011-07-28 14:38:22 2590
原创 lambda表达式的解析(一) 序
当你要把一个表达式字符串转换成一个lambda expression,本篇也许能帮到你。把一个字符串解析成lambda要做的工作其实就2个,第一步把字符串通过语法解析转换一颗语法树,第二步就是遍历这棵树把它转换成.lambda expression。做一个C#语法解析器是件麻烦事,好在有一些现成的解析器可以使用,这里选用Irony来完成这个工作。Irony的包里含有一个Sample的C#
2011-07-27 14:51:17 6082 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人