使用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
相关产品推荐
相关产品推荐

