首页 > 其他分享 >linq的延迟加载

linq的延迟加载

时间:2024-03-27 14:34:30浏览次数:23  
标签:ToList 执行 list 加载 linq 100 FieldA Select 延迟

下面两端代码执行结果为何不同

list.Select(x => { x.FieldA = 100; return x; });
list.ForEach(x => { Console.WriteLine(x.FieldA); });

list.Select(x => { x.FieldA = 100; return x; }).ToList();
list.ForEach(x => { Console.WriteLine(x.FieldA); });

我明白你的疑惑了。这里的关键是理解LINQ操作的“延迟执行”(deferred execution)特性,以及何时这些操作实际上被“执行”或“实现”。

对于这段代码:

list.Select(x => { x.FieldA = 100; return x; });
list.ForEach(x => { Console.WriteLine(x.FieldA); });

虽然Select方法中确实对list中的每个元素执行了一个操作(将FieldA设为100),但这个操作仅在Select生成的序列被迭代时才真正执行。在这个例子中,没有任何操作迫使Select生成的序列立即执行或被迭代。因此,Select调用本身并没有立即对list中的元素产生影响。

然而,当你调用.ToList()时:

list.Select(x => { x.FieldA = 100; return x; }).ToList();

这迫使Select操作立即执行,因为ToList()需要迭代Select生成的序列来创建一个新的列表。这个过程中,Select中的每个元素都被迭代并执行了给定的操作(修改FieldA),这导致了list中相应元素的FieldA被修改。

因此,虽然list确实是引用类型的集合,并且你在Select中修改了它的元素,但是这些修改只有在Select操作被迫立即执行时(如通过ToList(),ToArray()等方法)才真正应用到元素上。这就是为什么没有ToList()调用时,你看不到修改的原因。

总结来说,你的观察是对的:在这种情况下,需要ToList()(或类似的方法)来“实现”Select中的修改,因为这样会迫使Select操作立即执行,从而应用这些修改。

标签:ToList,执行,list,加载,linq,100,FieldA,Select,延迟
From: https://www.cnblogs.com/Nine4Cool/p/18099091

相关文章

  • 求助,路过的大佬帮忙看一下!!!!elment中input组件使用prefix-icon="el-icon-search"不加载
    背景:创建了一个简单的vue工程想用测试一下el-input组件的功能,没有显示图标。代码如下所示<template><el-inputv-model="value"placeholder="请输入内容":disabled="false":show-password="true":clearable="true"prefix......
  • linq一些常用方法
    Distinct-过滤集合中的相同项(去重);List<int>list=newList<int>(){1,2,3,4,4,5,6,6};varnewlist=list.Distinct();//结果就是;1,2,3,4,5,6Union-并集List<int>list=newList<int>(){1,2,3,4,4,5,6,6};List<int>list1=newList<int&g......
  • vue3路由懒加载
            路由懒加载作用:部分项目过大,首次加载耗费时间较多,路由懒加载可以让首屏组件加载速度更快一些,减少用户首次使用等待时间    路由懒加载的本质:按需引入    下面是未使用懒加载的代码:importLoginfrom'@/views/login/index.vue'constrout......
  • UE4.27, 代码实践, 资源加载 FSoftClassPath / FSoftObjectPath
    //以下的FSoftClassPath/FSoftObjectPath都公开在Editor里设定 //iteminTArray<FSoftClassPath>FSoftClassPathtemp=FSoftClassPath_UsedInBluePrint_BuildFunc(item);UClass*LoadedClass=temp.TryLoadClass<AActor>();FSoftClassPathFSoftClassPath_UsedInBlu......
  • 【Flink】Flink如何覆盖系统类、优先加载用户类、child-first使用技巧
    1.概述一个问题,关于类加载的,就是我使用了flink-sql-connector-kafka的依赖,但是我改了这个类,和任务在一个jar包里面,flink-sql-connector-kafka.jar和Flink的lib中的jar在hdfs上,Flinkonyarn的方式提交作业,但是我改的这个类不生效(还是用的flink-sql-connector-kafka里面的......
  • 加载权重时候出现:not created its variables yet
    ValueError:UnabletoloadweightssavedinHDF5formatintoasubclassedModelwhichhasnotcreateditsvariablesyet.CalltheModelfirst,thenloadtheweights.这个错误是由于尝试将保存在HDF5格式中的权重加载到一个还未创建其变量的子类模型中所导致的......
  • 动态尺寸加载libpag文件白边问题解决方案
    加载pag文件时,最理想的情况是canvas的宽高和pag资源文件的宽高一致,或比例一致。否则就会出现四周白边(页面底色),除非是按平铺的样式进行设置(源码暂未找到对应方法)。而对于页面宽高不定的情况下,就无法保证pag文件能适配页面,如果pag文件底色和父级页面底色不一致,就会表现出来......
  • 普通的动态加载库 和 显式运行时链接
    静态库:静态库在编译时被链接到你的程序中,因此它们会成为你程序的一部分。这意味着当你运行你的程序时,静态库中的代码已经被包含在你的程序中,因此你的程序可以独立运行,不需要依赖外部库文件。静态库的一个缺点是,它会增加你程序的体积,因为静态库中的代码会被完整地复制到你的......
  • CentOS加载yum源时报错 [Errno 14] HTTP Error 404 - Not Found Trying other mirror.
    报错内容:[[email protected]]#yumrepolistLoadedplugins:fastestmirror,product-id,search-disabled-repos,subscription-managerThissystemisnotregisteredtoRedHatSubscriptionManagement.Youcanusesubscription-managertoregister.Determiningf......
  • Java-Java基础学习(5)-注解和反射以及类的加载过程分析
    4.1注解的理解Annotation是从JDK5.0开始引入的新技术Annotation的作用不是程序本身,可以对程序作出解释(这点和注释comment没什么区别);可以被其他程序(比如:编译器等)读取;Annotation的格式注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(v......