C#LINQ目标需要是静态的

时间:2011-07-07 04:12:20

标签: c# linq-to-objects

在下面的代码中,为什么数组(arr)必须是静态的?

如果我删除静态,那么在LINQ查询中使用它就不再可见了。

class A
{
     static int[] arr = { 1, 2, 3, 4 };
     IEnumerable<int> result = from i in arr where i < 10 select i;
}

感谢。

1 个答案:

答案 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实例字段初始化

  

实例的变量初始值设定项   字段无法引用实例   被创造。因此,它是一个   编译时错误引用此   在变量初始化程序中,因为它是一个   变量的编译时错误   初始化程序引用任何实例   会员通过一个简单的名字。

这是有道理的,因为变量初始化器在基类构造函数之前执行,因此类实例尚未完全“构造”。