是否可以通过Reflection写下面的代码?使用反射调用传递Lamba作为参数的静态泛型方法
var fake = A.Fake<Foo>(
o => o.WithArgumentsForConstructor(new[] { "Hello" }));
凡Ø是:
Action<IFakeOptionsBuilder<T>>
凡WithArgumentsForConstructor是:
IFakeOptionsBuilder<T> WithArgumentsForConstructor(IEnumerable<object> argumentsForConstructor);
Foo类是:
class Foo
{
public Foo(string s)
{
}
}
我所做的是:
object fake = typeof(A)
.GetMethod("Fake", new Type[] { })
.MakeGenericMethod(new[] { this.targetType })
.Invoke(null, /* Here I need to pass the lambda. */);
“通过反射写下面的代码” - 你是指用Reflection.Emit还是什么? lambda通常首先编译的是一个表达式,您可能希望实际创建一个表达式,然后生成所需的IL代码。 – Lucero
嗨,不是用Reflection.Emit。可以使用Emit,但我想用System.Reflection命名空间中定义的类型来完成它。 –
那么,反射(不发射)不会产生任何代码,但正如我所说的表达式是你最亲密的朋友在这里。 – Lucero