инициализатор поля не может ссылаться на метод нестатического поля или свойство Error - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь работать с .Net C # и хранилищем BLOB-объектов Azure

Я следую документации Microsoft для доступа к таблице BLOB-объектов.

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Controllers
{
    public class EmailAdress
    {
        CloudStorageAccount storageAccount = new CloudStorageAccount(
            new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(
                "experimentstables", "token"), true);

        // Create the table client.
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

        // Get a reference to a table named "peopleTable"
        CloudTable pexperimentsEmailAddresses = tableClient.GetTableReference("experimentsEmailAddresses");
    }
}

в этой строке

CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

storageAccount помечен красным со следующей ошибкой:

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

Как мне это исправить?

Ответы [ 3 ]

0 голосов
/ 04 ноября 2018

Создайте конструктор и осуществите там все ваши инициализации поля.

public class EmailAdress
{
    CloudStorageAccount storageAccount;
    CloudTableClient tableClient;
    CloudTable pexperimentsEmailAddresses;

    public EmailAdress()
    {
        storageAccount = new CloudStorageAccount(
        new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(
            "experimentstables", "token"), true);

        // Create the table client.
        tableClient = storageAccount.CreateCloudTableClient();

        // Get a reference to a table named "peopleTable"
        pexperimentsEmailAddresses = tableClient.GetTableReference("experimentsEmailAddresses");
    }
}
0 голосов
/ 04 ноября 2018

Спецификация языка c # четко гласит:

Инициализатор переменной для поля экземпляра не может ссылаться на создаваемый экземпляр. Таким образом, это ошибка времени компиляции, чтобы ссылаться на это в инициализаторе переменной, так как это ошибка времени компиляции для инициализатора переменной, чтобы ссылаться на любой элемент экземпляра через simple_name.

Вы можете инициализировать поле относительно другого поля только в конструкторе.

Не компилируется:

class A
{
    int x = 1;
    int y = x + 1;        // Error, reference to instance member of this
}

Скомпилирует:

class A
{
    public A() 
    {
        int x = 1;
        int y = x + 1;        // Works just fine
    }
}
0 голосов
/ 04 ноября 2018

Вы объявили storageAccount и tableClient в качестве членов класса, поэтому storageAccount должно быть static, чтобы использовать его

public class EmailAdress
{
    static CloudStorageAccount storageAccount = new CloudStorageAccount(...);
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
}

Или вы можете поместить инициализацию внутри метода.

...