使用的lambda表達式,我們正在建設我們需要下面的模式框架:角的情況下,在基類的構造
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());
}
}
奇怪的是,試圖真正使用它拋出NullReferenceException異常(控制檯應用程序)的拉姆達,或某種ExecutionEngineExceptionexception的(在IIS的Web應用程序)時。
我認爲原因是這個指針在調用基構造器之前還沒有準備好,所以lambda在這個階段無法捕獲this.Name
。
它不應該在「捕獲時間」而不是「執行時間」中拋出異常嗎? 此行爲是否記錄在案?
我可以以不同的方式重構代碼,但我認爲它值得評論。
這是之前問過的,它會在C#4.0中修復的 – leppie 2009-12-09 19:36:41