c# - 通过 Lazy<T> 或任何 lambda 表达式访问非静态成员

标签 c# .net .net-4.0 lazy-evaluation

我有这个代码:

public class MyClass
{
    public int X { get; set; }
    public int Y { get; set; }

    private Lazy<int> lazyGetSum = new Lazy<int>(new Func<int>(() => X + Y));
    public int Sum{ get { return lazyGetSum.Value; } }

}

给我这个错误:

A field initializer cannot reference the non-static field, method, or property.

我觉得通过lazy访问一个非静态成员是很合理的,怎么办?

* 编辑 *

接受的答案完美地解决了问题,但要一如既往地了解问题的详细和深入原因,您可以阅读 Joh Skeet's answer

最佳答案

您可以将其移动到构造函数中:

private Lazy<int> lazyGetSum;
public MyClass()
{
   lazyGetSum = new Lazy<int>(new Func<int>(() => X + Y));
}

有关问题原因的更多详细信息,请参阅下面的@JohnSkeet 回答。 Accessing a non-static member via Lazy<T> or any lambda expression

关于c# - 通过 Lazy<T> 或任何 lambda 表达式访问非静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14029425/

相关文章:

c# - 取消长时间运行的任务后如何正确清理

c# - MVC 4 中的多线程

c# - VB6 到 VB.NET 转换按钮样式

c# - Func<> 的 List<>,具有通用返回类型的编译错误,但为什么呢?

asp.net - Web 服务与 WCF

jquery - WebForms(相对于 MVC)4.0 版对移动设备和 jQuery 的友好程度如何?

c# - 链接图片源文件名与实际链接不同

.net - XPathNavigator.Select ("self::node()/../..[@numberOfLocationsAdded!=' 0']")

c# - CodeContract 是否类似于 FxCop?

c# - 模拟磁盘空间不足异常