Недавно я столкнулся с таким вопросом:
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
?