C#数组是一个字段,但是像类型一样使用

时间:2012-08-15 18:22:15

标签: c# arrays string variables

  

可能重复:
  (object) is a 'field' but is used like a 'type'

正如你可能从标题中猜到的那样,我收到了这个错误:

Invasion_server.variables.resources is a field but is used like a type

给我这个错误的代码是:

class variables
{
    ....
    public static string[] resources = new string[30];
    resources[0] = "cities_wood";
    ....
}

有人可以告诉我导致问题的原因,因为代码中的其他地方正在运行......

6 个答案:

答案 0 :(得分:4)

你应该用某种方法

来做这件事

答案 1 :(得分:3)

试试这个:

class variables
{
    public static string[] resources = new string[30];

    static void doSomething() {
        resources[0] = "cities_wood";
    }
}

您没有在类构造函数或方法中分配变量。

答案 2 :(得分:3)

如果要在构造函数或方法体之外初始化数组成员,则需要使用带有声明的初始化语法来执行此操作:

class variables
{ 
  public static string[] resources = new string[30] 
  { 
    "item one",
    "item two",
    ...
  }
}

这样做的缺点是你需要填充所有30个值。如果您只想填充第一个,那么您需要在构造函数或方法体中执行此操作。您可以考虑一个静态构造函数,它与声明时的初始化具有相同的净效果;静态构造函数在第一次访问类的成员时运行。例如:

class variables
{
  public static string[] resources;

  static variables()
  {
    resources = new string[30];
    resources[0] = "item one";
  }
}

答案 3 :(得分:2)

这是因为你试图对类体中的变量进行操作,而不是在方法中。你的课堂上应该只有几件东西:

  1. 字段:int myField = 0;
  2. 方法:public void myMethod(){ }
  3. 构造函数/析构函数(只是一种特殊类型的方法):public MyClass(){}
  4. 因此,当编译器看到;之后的第一个单词(意味着它是新代码行的第一个单词)时,它希望看到像public这样的标识符,static等,或Type,如int。由于它不是标识符,因此它查找了一个类型,因为它不是一个类型,所以你得到了错误。

    希望能很好地解释它。

答案 4 :(得分:1)

你做不到

resources[0] = "cities_wood";

在您的班级定义中。在静态构造函数中或使用列表初始化程序。

答案 5 :(得分:1)

您必须初始化方法或构造函数中的字段或声明中的所有字段,如

class variables

    {
         public static string[] resources = new string[30];

        public variables()
        { 
           resources[0] = "cities_wood";
        }
    }

OR

 public static string[] resources = {"cities_wood", "....", "more stuff", "and more stuff"};//Your 30 or les or more variables separated by a comma