我试图动态生成一个实现给定接口的类。因此,我需要实现一些方法。我想避免直接发出IL指令,因此我尝试使用表达式树和CompileToMethod。不幸的是,其中一些方法需要访问所生成类的字段(就像我将this.field写入要实现的方法中一样)。是否可以使用表达式树访问“ this”? (通过“ this”,我的意思是将调用该方法的对象。)
如果是,那么表达式树的这种方法是什么样的?
int SomeMethod() {
return this.field.SomeOtherMethod();
}
答案 0 :(得分:2)
May 08 18:36:07 ip-10-0-1-87 postgresql@11-main[3617]: 2019-05-08 18:36:06.776 UTC [3623] PANIC: could not write to file "pg_wal/xlogtemp.3623": No
或Expression.Constant
是您的朋友;例子:
ParameterExpression
或:
var obj = Expression.Constant(this);
var field = Expression.PropertyOrField(obj, "field");
var call = Expression.Call(field, field.Type.GetMethod("SomeOtherMethod"));
var lambda = Expression.Lambda<Func<int>>(call);
(在后一种情况下,您将var obj = Expression.Parameter(typeof(SomeType));
var field = Expression.PropertyOrField(obj, "field");
var call = Expression.Call(field, field.Type.GetMethod("SomeOtherMethod"));
var lambda = Expression.Lambda<Func<SomeType, int>>(call, obj);
作为参数传递,但这意味着您可以存储lambda并将其重新用于不同的目标实例对象)
如果您的姓名固定,这里的另一个选项可能是this
:
dynamic