LINQ查询重用和延迟执行印象中我可以创建一个LINQ查询,然后在更改涉及的参数的同时重用它。但似乎您无法更改源集合。有人能给我一个很好的解释吗,因为我显然误解了一些基本的东西。这是一些示例代码。varsource=Enumerable.Range(1,10);varvalue=source.Where(x=>x>5);varfirst=value.ToArray();来源=Enumerable.Range(11,20);varsecond=value.ToArray();我希望第一个是6,7,8,9,10,第二个是11到20。当你这样做时:source=Enumerable.Range(11,20);您正在创建一个新对象。但是,Where查询仍然具有对旧对象的引用。来源=Enumerable.Range(11,20);varsecond=value.ToArray();second=Enumerable.Range(11,20);varsecond=value.ToArray();找到差异;)因为值=来源。Where(x=>x>5)急切地评估source的值,但推迟对x=>x>5部分的评估。当您重新分配源时,原始范围仍然存在,源只是指向不同的范围。简而言之,lambda中的值是惰性求值的。延迟执行示例source=Enumerable.Range(1,10).ToArray();value=source.Where(x=>x>5);varfirst=value.ToArray();//6,7,8,9,10来源.[0]=100;varsecond=value.ToArray();//100,6,7,8,9,10延迟访问源代码的示例(我不推荐这种类型的代码,它如何访问lambda中的源变量?创建一个可以延迟访问的'闭包'源码以上就是C#学习教程:LINQ查询重用和延迟执行,如果对大家有用还需要了解更多关于C#学习教程,希望大家多多关注--source=Enumerable.Range(1,10);value=Enumerable.Range(1).SelectMany(n=>source.Where(x=>x>5));varfirst=value.ToArray();source=Enumerable.Range(11,20);varsecond=value.ToArray();本文采集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载,请注明出处:
