延迟加载错误:一个字段初始不能引用非静态字段,方法或属性

问题描述:

我想使用延迟加载,第一次在我班上来初始化进度的对象。不过,我发现了以下错误:懒<T>延迟加载错误:一个字段初始不能引用非静态字段,方法或属性

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

private Lazy<Progress> m_progress = new Lazy<Progress>(() => 
{ 
    long totalBytes = m_transferManager.TotalSize(); 
    return new Progress(totalBytes); 
}); 

在.NET 2.0中,我可以做以下,但我宁愿使用更是最新的方法:

private Progress m_progress; 
private Progress Progress 
{ 
    get 
    { 
     if (m_progress == null) 
     { 
      long totalBytes = m_transferManager.TotalSize(); 
      m_progress = new Progress(totalBytes); 
     } 
     return m_progress; 
    } 
} 

任何人都可以帮忙吗?

非常感谢。

初始化程序需要将this传递到捕获类中,并且this不能从字段初始值设定程序中使用。然而,是在构造函数中使用

private readonly Lazy<Progress> m_progress; 
public MyType() 
{ 
    m_progress = new Lazy<Progress>(() => 
    { 
     long totalBytes = m_transferManager.TotalSize(); 
     return new Progress(totalBytes); 
    }); 
} 

就个人而言,我只是用get访问,不过,P

+0

非常感谢你:) – bobbo 2012-08-06 13:18:02

+0

懒惰的初始化可以返回空值,和仍然被初始化。在这种情况下,属性getter会尝试一次又一次地初始化。 – wensveen 2017-03-09 08:27:20

+0

@wensveen没有也不会:https://gist.github.com/mgravell/b547455bb4afe25cdae44d8cc78b8bdd – 2017-03-09 11:20:55