是否可以通過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