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;
}
谢谢。
如果使用变量初始化器直接初始化变量,则不能访问其他类实例变量——您可以将代码移到构造函数中:
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引用这个的编译时错误在变量初始化项中,因为它是变量的编译时错误初始化项引用任何实例
这是有意义的,因为变量初始化器是在基类构造函数之前执行的,因此类实例还没有完全"构造"。