You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改原变量或声明新变量的情况下处理数据并返回原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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:20:46