Недавно я столкнулся с таким вопросом:
What numbers will be printed considering the following code:
class Program
{
static void Main(string[] args)
{
int[] numbers = { 1, 3, 5, 7, 9 };
int threshold = 6;
var query = from value in numbers where value >= threshold select value;
threshold = 3;
var result = query.ToList();
result.ForEach(Console.WriteLine);
Console.ReadLine();
}
}
Ответ: 3, 5, 7, 9
Это было для меня удивительным. Я думал, что значение threshold будет помещено в стек при построении запроса, а позже во время выполнения, это число будет отброшено и использовано в условии.. которого не произошло.
Другой случай (numbers установлен на null перед исполнением):
static void Main(string[] args)
{
int[] numbers = { 1, 3, 5, 7, 9 };
int threshold = 6;
var query = from value in numbers where value >= threshold select value;
threshold = 3;
numbers = null;
var result = query.ToList();
...
}
Кажется, не влияет на запрос. Он печатает точно такой же ответ, как в предыдущем примере.
Может ли кто-нибудь помочь мне понять, что действительно происходит за сценой? Почему изменение threshold влияет на выполнение запроса при изменении numbers?