Вы не можете получить доступ к другим переменным экземпляра класса, если непосредственно инициализируете переменные с помощью инициализатора переменной - вместо этого вы можете переместить код в конструктор:
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 Инициализация поля экземпляра :
инициализатор переменной для экземпляра
поле не может ссылаться на экземпляр
создается Таким образом, это
ошибка времени компиляции для ссылки на это
в инициализаторе переменной, так как это
ошибка времени компиляции для переменной
инициализатор для ссылки на любой экземпляр
член через простое имя.
Это имеет смысл, поскольку инициализаторы переменных выполняются до конструктора базового класса, следовательно, экземпляр класса еще не был "полностью" создан.