Dan*_*bel 31 c# .net-4.0 lazy-initialization
我想使用Lazy T来实现memoization,但初始化函数似乎需要一个静态上下文.
例如,以下代码拒绝编译,警告非静态成员a和b不可访问.我不清楚为什么会这样,因为Lazy对象本身就是一个实例成员,并且在静态上下文中没有可见性.
public class SomeExpensiveCalculation
{
private int a;
private int b;
public Lazy<int> Result = new Lazy<int>(() => a + b); //nope!
}
Run Code Online (Sandbox Code Playgroud)
lar*_*moa 32
构造函数(或方法)之外的对象初始值设定项只能引用静态成员.这是因为在构造函数运行之前尚未构造实例,因此字段不是"就绪",因此无法引用.静态字段起作用,因为它们在字段之前初始化.
请注意,错误不是Lazy<T>由lambda表达式引起的.解决方法(以及执行此操作的正确方法)是Result在构造函数中初始化.
Ond*_*dra 12
我不知道为什么你的代码不起作用,但这应该工作:
public class SomeExpensiveCalculation
{
private int a;
private int b;
public Lazy<int> Result;
public SomeExpensiveCalculation()
{
Result = new Lazy<int>(() => a + b);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6312 次 |
| 最近记录: |