Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#数组是一个字段,但与类型一样使用_C#_Arrays_String_Variables - Fatal编程技术网

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

C#数组是一个字段,但与类型一样使用,c#,arrays,string,variables,C#,Arrays,String,Variables,可能重复: 正如您可能从标题中猜到的,我是否遇到了以下错误: 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"; .... } 谁能告诉我是什

可能重复:

正如您可能从标题中猜到的,我是否遇到了以下错误:

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

谁能告诉我是什么导致了这个问题,因为在代码的其他地方它正在工作…

你应该用某种方法来做这件事

试试这个:

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

    static void doSomething() {
        resources[0] = "cities_wood";
    }
}
您没有在类构造函数或方法中分配变量。

您不能这样做

resources[0] = "cities_wood";

在您的类定义中。在静态构造函数中或使用列表初始值设定项进行初始化。

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

class variables

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

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


这是因为您试图对类主体中的变量而不是方法中的变量执行操作。在你的班级里,你应该只有几样东西:

  • 字段:
    int myField=0
  • 方法:
    public void myMethod(){}
  • 构造函数/析构函数(只是一种特殊类型的方法):
    publicmyclass(){}
  • 因此,当编译器看到
    后面的第一个单词时
    (意思是它是新代码行的第一个单词),它希望看到一个标识符,如
    public
    static
    ,等等,或者一个
    类型,如
    int
    。因为它不是一个标识符,所以它查找一个类型,因为它不是一个类型,所以您得到了错误


    希望这能很好地解释它。

    如果您想在构造函数或方法体之外初始化数组的成员,则需要使用初始化器语法和声明:

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

    您能从非静态函数获取静态变量吗?@StackUser是非静态可以看到静态,但静态无法看到nonstatic@StackUser谢谢你的回答。她打字很快
    class variables
    {
      public static string[] resources;
    
      static variables()
      {
        resources = new string[30];
        resources[0] = "item one";
      }
    }