var tar = Expression.Label(typeof(int)); var p1=Expression.Parameter(typeof(int), "a"); var p2 = Expression.Parameter(typeof(int), "b"); var v1=Expression.Variable(typeof(int), "c"); var v2 = Expression.Assign(v1, Expression.Constant(100)); var b1=Expression.Add(p1, p2); var b2 = Expression.Add(b1, v2); var ret = Expression.Return(tar,b2); var lbl = Expression.Label(tar, Expression.Constant(0)); var block=Expression.Block(new ParameterExpression[] { v1},v2,ret,lbl); Expression.Lambda<Func<int, int, int>>(block, p1, p2).CompileToMethod(addMethod);想用表達(dá)式實(shí)現(xiàn)public int Add(int a,int b){var c=100;return a+b+c;},結(jié)果覺(jué)發(fā)現(xiàn)寫了這么多代碼,真是花費(fèi)不小啊。到了最后一步CompileToMethod又被坑了,addMethod必須是靜態(tài)方法(總是失敗,反編譯發(fā)現(xiàn)),這是一個(gè)多么大的限制啊~不過(guò)仔細(xì)想想其實(shí)也有它的道理,沒(méi)有上下文this。如果我是需要一個(gè)委托,干嘛費(fèi)那么大事呢?
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注