如何筛选List<MainObjectClass>并清理嵌套CarIds列表元素
解决方案
方法一:原地修改原列表及对象
这种方式直接对原列表和其中的对象进行修改,无需创建新的对象实例:
// 1. 移除所有CarIds不包含10001的MainObjectClass response.RemoveAll(item => !item.CarIds.Contains(10001)); // 2. 遍历保留的对象,清理CarIds仅保留10001 foreach (var item in response) { // 因10001在集合中唯一,直接替换为仅含该元素的列表 item.CarIds = new List<int> { 10001 }; // 若不想重新创建List,也可以用RemoveAll移除其他元素: // item.CarIds.RemoveAll(id => id != 10001); }
方法二:用LINQ生成新列表(非原地操作)
如果希望生成全新的对象列表而非修改原对象,可使用LINQ组合筛选与投影:
response = response .Where(item => item.CarIds.Contains(10001)) .Select(item => new MainObjectClass { Id = item.Id, Name = item.Name, CarIds = new List<int> { 10001 } }) .ToList();
关键说明
你之前的代码存在类型错误:List.RemoveAll()返回的是被移除元素的数量(int类型),不能直接赋值给List<MainObjectClass>类型的response。
两种方法均能满足你的场景需求:
- 场景1:保留对象,CarIds维持仅含10001的状态;
- 场景2:保留对象,CarIds仅保留10001;
- 场景3:对象被从主列表中移除。
内容的提问来源于stack exchange,提问作者lonelydev101
相关产品推荐
相关产品推荐

