在下面的代码中,为什么数组(arr)必须是静态的?
如果我删除静态,那么在LINQ查询中使用它就不再可见了。
class A
{
static int[] arr = { 1, 2, 3, 4 };
IEnumerable<int> result = from i in arr where i < 10 select i;
}
感谢。
答案 0 :(得分:3)
如果使用变量初始化程序直接初始化变量,则无法访问其他类实例变量 - 您可以将代码移动到构造函数中:
class A
{
int[] arr = { 1, 2, 3, 4 };
IEnumerable<int> result;
public A()
{
result = from i in arr where i < 10 select i;
}
}
从C#规范, 10.5.5.2实例字段初始化:
实例的变量初始值设定项 字段无法引用实例 被创造。因此,它是一个 编译时错误引用此 在变量初始化程序中,因为它是一个 变量的编译时错误 初始化程序引用任何实例 会员通过一个简单的名字。
这是有道理的,因为变量初始化器在基类构造函数之前执行,因此类实例尚未完全“构造”。