字段初始值设定项无法引用非静态字段方法或属性Error

时间:2018-11-04 11:17:28

标签: c# asp.net azure azure-storage-blobs

我正在尝试使用.Net C#和Azure blob存储

我遵循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 :(得分:1)

您已将storageAccounttableClient声明为类成员,因此storageAccount必须为static才能使用

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

或者您可以将初始化放在方法中。

答案 1 :(得分:1)

创建一个构造函数并在那里实现所有字段初始化。

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

答案 2 :(得分:1)

c# language specification明确指出:

  

实例字段的变量初始化程序无法引用正在创建的实例。因此,在变量初始值设定项中引用它是编译时错误,因为对于变量初始值设定项通过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
    }
}