c# LINQ目标需要是静态的

本文关键字:静态 LINQ 目标 | 更新日期: 2023-09-27 18:01:30

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

如果我删除static,那么在LINQ查询中使用它将不再可见。

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

谢谢。

c# LINQ目标需要是静态的

如果使用变量初始化器直接初始化变量,则不能访问其他类实例变量——您可以将代码移到构造函数中:

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

实例的变量初始化项字段不能引用实例被创建。因此,它是a引用这个的编译时错误在变量初始化项中,因为它是变量的编译时错误初始化项引用任何实例

这是有意义的,因为变量初始化器是在基类构造函数之前执行的,因此类实例还没有完全"构造"。