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

使用LINQ处理带私有Setter的C#父子类结构是否可行?

当然可以用LINQ实现各类操作!

你的Parent类结构完全支持LINQ查询——不管是对Parent对象的集合,还是每个Parent内部的Children列表,LINQ都能轻松完成筛选、投影、聚合等操作。下面举几个常见的场景示例:

1. 筛选符合条件的Parent对象

比如找出所有IsAccepted为true,且RandomValue大于50的父对象:

List<Parent> parents = GetParentList(); // 假设这是你的父对象集合
var filteredParents = parents.Where(p => p.IsAccepted && p.RandomValue > 50);

2. 扁平化处理所有子对象并筛选

如果你想从所有父对象的子列表中,找出满足特定条件的Child(比如假设Child有个Age属性,找年龄大于10的),可以用SelectMany扁平化集合:

var eligibleChildren = parents.SelectMany(p => p.Children)
                             .Where(c => c.Age > 10); // 假设Child有Age属性

3. 投影转换为新类型(比如DTO)

如果需要把Parent转换成只包含部分字段的传输对象,LINQ的Select可以轻松实现:

var parentDtos = parents.Select(p => new {
    p.RecordTime,
    p.IsAccepted,
    ChildCount = p.Children.Count,
    ChildNames = p.Children.Select(c => c.Name) // 假设Child有Name属性
});

4. 聚合计算统计值

比如统计所有父对象的RandomValue总和,或者所有子对象的总数:

int totalRandomValue = parents.Sum(p => p.RandomValue);
int totalChildCount = parents.Sum(p => p.Children.Count);

注意点

虽然Children属性的setter是private,但LINQ是查询操作,不会修改原集合的引用或内容(除非你主动调用ToList()/ToArray()生成新集合,但这也只是创建副本,不会改动原Parent对象的Children),所以完全不用担心权限问题。

内容的提问来源于stack exchange,提问作者user1307149

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:01:55