Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство

Ниже приведен мой код:

private BitsManager manager;
private const string DisplayName = "Test Job";       

public SyncHelper()
{
    manager = new BitsManager();
}        

BitsJob uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload);

Я получаю следующую ошибку:

A field initializer cannot reference the non-static field, method, or property 'BITSIntegrationModule.SyncService.SyncHelper.manager'

3 ответа

Решение

Линия

BitsJob uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload);

не могу получить доступ к диспетчеру, потому что он еще ни к чему не настроен - вы можете переместить выделение в конструктор -

private readonly BitsManager manager;
private const string DisplayName = "Test Job";       
BitsJob readonly uploadBitsJob;

public SyncHelper()
{
  manager = new BitsManager();
  uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload);
}   

uploadBitsJob объявляется на уровне класса, что делает его полем. Экземпляры полей нельзя использовать для инициализации других полей.

Вместо этого вы можете объявить поле без его инициализации:

BitsJob uploadBitsJob;

Затем инициализируйте поле в конструкторе:

public SyncHelper()
{
  manager = new BitsManager();
  uploadBitsJob = manager.CreateJob(DisplayName, JobType.Upload);//here.  Now manager is initialized
}  

Обычно это происходит при попытке получить доступ к нестатическому свойству из статического метода. Пожалуйста, предоставьте немного больше кода.

Другие вопросы по тегам