在我们构建的框架中,我们需要以下模式:
- 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.
它不应该在“捕获时间”而不是“执行时间”中抛出异常吗?
这种行为是否有记录?