14

クラスの進行状況オブジェクトを初期化するために、初めて遅延読み込みを使用しようとしています。ただし、次のエラーが発生します。

フィールド初期化子は、非静的フィールド、メソッド、またはプロパティを参照できません。

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;
    }
}

誰か助けてもらえますか?

どうもありがとう。

4

1 に答える 1

32

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

于 2012-08-06T13:02:30.053 に答える