如何在不修改原变量或声明新变量的情况下处理数据并返回原classes变量
问题描述
需求:不修改原变量或声明新变量的前提下,对数据进行过滤处理,修改数据对象的属性后返回原变量classes。已知Where操作不会更新原变量,期望实现的效果是将符合classStudent.ListEtab.Contains(i.schoolId)条件的项的Disabled设为false,其余设为true。
当前实现代码:
get { classes.ToList().ForEach(cc => cc.Disabled = true); classes.Where(i => classStudent.ListEtab.Contains(i.schoolId)) .ToList() .ForEach(cc => cc.Disabled = false); return classes; }
解决方案
你的当前代码已经满足需求——因为ToList()虽然会创建一个新的列表实例,但列表中的元素是原classes集合中对象的引用,所以修改这些元素的Disabled属性会直接作用于原集合中的对象,最终返回的classes就是修改后的原变量。
如果想优化性能(减少一次遍历),可以合并成单次循环:
get { classes.ToList().ForEach(cc => cc.Disabled = !classStudent.ListEtab.Contains(cc.schoolId) ); return classes; }
或者若classes本身是支持直接遍历的集合类型(比如List<T>),可以省去ToList()步骤,直接遍历修改:
get { foreach (var cc in classes) { cc.Disabled = !classStudent.ListEtab.Contains(cc.schoolId); } return classes; }
以上两种写法都不会创建新变量,也不会修改classes变量本身(仅修改集合内对象的属性),最终返回的都是原classes变量。
内容的提问来源于stack exchange,提问作者Hamza Modakir
相关产品推荐
相关产品推荐

