我的阵列声明有什么问题?

时间:2013-12-23 16:23:22

标签: c# xna

以下作品:

int[] numbers = new int[2];

以下内容不是:

int Size = 2;
int[] numbers = new int[Size];

错误:“字段初始值设定项不能引用非静态字段,方法或属性”

我知道这必须是我做一些愚蠢的事情,但却无法解决它究竟是什么。

3 个答案:

答案 0 :(得分:4)

您可以通过常量但不是变量来给出数组的大小,因为如果在类级别的方法中声明数组,则无法在类级别给出数组的大小。 C#不保证类中字段的初始化顺序,因此您不能使用一个非静态字段来初始化方法reference之外的另一个非静态字段。

const int Size = 2;
int[] numbers = new int[Size];
void SomeFun()
{

}

如果你在某个方法中声明它,那么你不会得到错误。

void SomeFun()
{
     int Size = 2;
     int[] numbers = new int[Size];
}

如果您的集合大小在运行时未知,则可以使用list而不是array。

List<int> lst = new List<int>();

答案 1 :(得分:1)

将这些初始化放入构造函数中:

public class MyClass
{

    const int Size;
    int[] numbers;

    public MyClass()
    {
        this.Size = 2;
        this.numbers = new int[this.Size];
    }

}

通过这种方式,您可以保证执行初始化的顺序。

答案 2 :(得分:0)

您不能使用实例变量初始化另一个实例变量。无法保证'size'变量将在'number'数组之前初始化。字段的初始值需要使用常量 - 它不像那样限制;他们还可以引用静态字段,方法或属性。