c# – 在基础构造函数中使用lambdas表达式的例子

c# – 在基础构造函数中使用lambdas表达式的例子,第1张

概述在我们构建的框架中,我们需要以下模式: public class BaseRenderer{ Func<string> renderer; public BaseRenderer(Func<string> renderer) { this.renderer = renderer; } public string Render() 在我们构建的框架中,我们需要以下模式:
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编译器正确地将您的程序标记为错误.

很多道歉给您带来不便;这是我的错.

总结

以上是内存溢出为你收集整理的c# – 在基础构造函数中使用lambdas表达式的例子全部内容,希望文章能够帮你解决c# – 在基础构造函数中使用lambdas表达式的例子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存