如果这是一个重复的问题,我道歉;
我可以找出数组中元素的数量:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
string[] myThings = new string[] {"Banana", "Dinosaur", "Gwen Stefani"};
// int l = myThings.Length; // FAIL!
// Use this for initialization
void Start ()
{
ProcessThings();
}
void ProcessThings ()
{
//int l = myThings.Length;
print("Things: " + l);
}
}
我的问题是为什么我不能在方法之外声明l = myThings.Length(第9行)? 字段初始值设定项不能引用非静态字段,方法或属性“Test.myThings”
对我轻松,我正在学习:)
从蜡笔上升到C#
答案 0 :(得分:2)
通常不允许这样做,因为编译器可能会重新排列变量,并且无法保证字段myThings在其长度分配给l之前将被初始化。
作为替代方法,您可以在构造函数中初始化字段l。
答案 1 :(得分:1)
来自C#规范的解释。
10.5.5.2实例字段初始化
实例字段的变量初始值设定项无法引用正在创建的实例。从而 在变量初始值设定项中引用它是一个编译时错误,因为它是一个编译时 变量初始值设定项通过简单名称引用任何实例成员的错误。 在示例中
class A
{
int x = 1;
int y = x + 1; // Error: reference to instance member of this
}
y的变量初始值设定项导致编译时错误,因为它引用了一个成员 正在创建的实例。
答案 2 :(得分:0)
“您无法使用实例变量初始化另一个实例 变量。为什么?因为编译器可以重新排列这些 - 没有 保证提醒将在defaultReminder之前初始化,所以 上面的行可能会抛出NullReferenceException。“
请参阅此链接:A field initializer cannot reference the nonstatic field, method, or property
(顺便说一句,为此,请在您的类型之前添加static
)
答案 3 :(得分:0)
您假设字符串数组“mythings”在整数成员变量之前初始化,方法是尝试使用字符串数组中的属性来初始化整数。
无法保证初始化顺序。所以你不能做任何依赖于初始化顺序的事情。