C # LINQ Цель должна быть статической - PullRequest
3 голосов
/ 07 июля 2011

В следующем коде, почему необходимо, чтобы массив (arr) был статическим?

Если я удалю статический файл, он больше не будет виден для использования в запросе LINQ.

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

Спасибо.

1 Ответ

3 голосов
/ 07 июля 2011

Вы не можете получить доступ к другим переменным экземпляра класса, если непосредственно инициализируете переменные с помощью инициализатора переменной - вместо этого вы можете переместить код в конструктор:

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 Инициализация поля экземпляра :

инициализатор переменной для экземпляра поле не может ссылаться на экземпляр создается Таким образом, это ошибка времени компиляции для ссылки на это в инициализаторе переменной, так как это ошибка времени компиляции для переменной инициализатор для ссылки на любой экземпляр член через простое имя.

Это имеет смысл, поскольку инициализаторы переменных выполняются до конструктора базового класса, следовательно, экземпляр класса еще не был "полностью" создан.

...