class Program
{
static void Main(string[] args)
{
int[] arr = new int[] { 1, 2, 3 };
int num = 1;
var st = arr.Where(x => x > num);
num = 3;
st = st.Where(x => x < num);
Console.WriteLine(st.Count().ToString());
Console.ReadKey();
}
}
Почему на консоль выводится 0? Объясните подробно, плз.
Здравствуйте, BlackEric, Вы писали:
BE>Почему на консоль выводится 0? Объясните подробно, плз.
А так не понятнее:
https://dotnetfiddle.net/egwLQp
Выборка отложено производится, только когда вызываете Count. При этом num = 3 и в первом и во втором выражении.
Здравствуйте, BlackEric, Вы писали:
BE>BE>class Program
BE> {
BE> static void Main(string[] args)
BE> {
BE> int[] arr = new int[] { 1, 2, 3 };
BE> int num = 1;
BE> var st = arr.Where(x => x > num);
BE> num = 3;
BE> st = st.Where(x => x < num);
BE> Console.WriteLine(st.Count().ToString());
BE> Console.ReadKey();
BE> }
BE> }
BE>
BE>Почему на консоль выводится 0? Объясните подробно, плз.
Access of an outer variable will reference the instance of the variable that is active at the time the lambda_expression or anonymous_method_expression is evaluated.
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#anonymous-function-expressions