c# - 基于谓词过滤对象内部的对象数组
问题描述
假设我有某种类型的对象,其中包含某种其他类型的数组:
public class Mammal
{
public Leg[] Legs { get; set; }
}
public class Leg
{
public int Length { get; }
}
例如,如果我接到Mammal
某个GetMammals()
电话,我将如何根据谓词(例如高度)进行Legs
过滤?Mammal
Mammal.Legs.Where(l => l.Length > 10);
上面会返回一个IEnumerable<Legs>
,然后我必须找到一种方法将其塞回Mammal
,但是是否有一种简洁的方法可以直接在我的Mammal
对象上执行此操作,假设我以后必须将此filteredMammal
对象用于其他用途?
解决方案
您已经自己编写了解决方案。每个 linq 方法只返回一个新集合,而不是修改现有集合。
为此,您必须将返回的集合设置为您的哺乳动物属性:
myMammal.Legs = myMammals.Legs.Where(myPredicate).ToArray();
这假设您可以设置该属性。
另一个机会是编写一个Remove
方法:
void Remove(Predicate<Leg> predicate)
{
this.Legs = this.Legs.Where(x => !predicate(x)).ToArray();
}
不过,这仍然需要一个private
二传手。
最好的方法是制作Legs
一个List<Leg>
. 然后你可以打电话RemoveAll
:
myMammal.Legs.RemoveAll(myPredicate);
推荐阅读
- python - 在带有 Selenium 的 Chrome 上打开带有活动配置文件的 chrome 后,无法使用“get”功能加载站点?
- orbeon - Orbeon Forms 在升级版本后将 xforms-disabled 类附加到所有字段
- javascript - 在循环中使用 React-hook-forms 时如何获取相关错误消息,
- ios - 移除 UINavigationController 的黑色背景
- javascript - 当我删除不相关的元素时,反应按钮 onClick 不起作用
- javascript - 视频完成后如何自动播放小滑块?
- python - 将元组数组转换为数组到字符串数组python
- javascript - 根据子对象数组的过滤器对父对象数组进行分组
- c++ - 有没有办法在 C++ 源代码中嵌入一个字符串,该字符串将显示在核心转储中?
- python - 使用 Python 垂直线创建数据可视化