以下作品:
int[] numbers = new int[2];
以下内容不是:
int Size = 2;
int[] numbers = new int[Size];
错误:“字段初始值设定项不能引用非静态字段,方法或属性”
我知道这必须是我做一些愚蠢的事情,但却无法解决它究竟是什么。
答案 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'数组之前初始化。字段的初始值需要使用常量 - 它不像那样限制;他们还可以引用静态字段,方法或属性。