c# – 在基础构造函数中使用lambdas表达式的例子
发布时间:2020-12-15 18:30:28 所属栏目:百科 来源:网络整理
导读:在我们构建的框架中,我们需要以下模式: public class BaseRenderer{ Funcstring renderer; public BaseRenderer(Funcstring renderer) { this.renderer = renderer; } public string Render() { return renderer(); }}public class NameRenderer : BaseRend
在我们构建的框架中,我们需要以下模式:
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) {} } 如您所见,我们在调用基础构造函数时创建了一个lambda. public class Program { public static void Main() { Console.WriteLine(new NameRenderer(){Name = "Foo"}.Render()); } } 奇怪的是,当尝试实际使用lambda时,它会抛出NullReferenceException(控制台应用程序)或某种ExecutionEngineExceptionexception(IIS上的Web应用程序). 我认为原因是在调用基础构造函数之前这个指针还没有准备好,所以lambda在这个阶段无法捕获this.Name. 它不应该在“捕获时间”而不是“执行时间”中抛出异常吗? 我可以用不同的方式重构代码,但我认为值得评论. 解决方法
正如asgerhallas正确指出的那样,根据规范,这不应该是合法的.我们意外地允许这种虚假用法被错误检测器偷偷摸摸,该错误检测器在合法的情况下搜索“this”的错误用法.我已经修复了这个bug; C#4编译器正确地将您的程序标记为错误.
很多道歉给您带来不便;这是我的错. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |