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.
它不应该在“捕获时间”而不是“执行时间”中抛出异常吗?
这种行为是否有记录?
我可以用不同的方式重构代码,但我认为值得评论.
解决方法 正如asgerhallas正确指出的那样,根据规范,这不应该是合法的.我们意外地允许这种虚假用法被错误检测器偷偷摸摸,该错误检测器在合法的情况下搜索“this”的错误用法.我已经修复了这个BUG; C#4编译器正确地将您的程序标记为错误.很多道歉给您带来不便;这是我的错.
总结以上是内存溢出为你收集整理的c# – 在基础构造函数中使用lambdas表达式的例子全部内容,希望文章能够帮你解决c# – 在基础构造函数中使用lambdas表达式的例子所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)