在我们构建的框架中,我们需要以下模式:
public class BaseRenderer { Func<string> renderer; public BaseRenderer(Func<string> renderer) { this.renderer = renderer; } public string Render() { return renderer(); } } public class NameRenderer : BaseRenderer { public string Name{ get; set; } public NameRenderer () : base(() =>this.Name) {} }
public class Program { public static void Main() { Console.WriteLine(new NameRenderer(){Name = "Foo"}.Render()); } }
奇怪的是,当尝试实际使用lambda时,它会抛出NullReferenceException(控制台应用程序)或某种ExecutionEngineExceptionexception(IIS上的Web应用程序).
我认为原因是在调用基础构造函数之前这个指针还没有准备好,所以lambda在这个阶段无法捕获this.Name.
它不应该在“捕获时间”而不是“执行时间”中抛出异常吗?
这种行为是否有记录?