我正在尝试使用lambda表达式根据该对象内的值从列表中删除该对象。这是我的lambda:

ChartAttributes.ToList().RemoveAll(a => a.AttributeValue.Contains("PILOT"));

这是ChartAttributes列表
IList<IChartAttribute> ChartAttributes

这是上面列表中包含的对象ChartAttribute
    public virtual string AttributeKey { get; set; }
    public virtual string AttributeValue { get; set; }
    public virtual int ChartAttributeId { get; set; }
    public virtual int ChartSpecificationId { get; set; }

有一个图表属性,其AttributeKey设置为“PILOT”。但这永远不会消除。我究竟做错了什么?

谢谢

最佳答案

您的代码采用IEnumerable,将其所有元素复制到列表中,然后从该副本中删除项目。源IEnumerable未被修改。

试试这个:

var list =  ChartAttributes.ToList();
list.RemoveAll(a => a.AttributeValue.Contains("PILOT"));
ChartAttributes = list;

编辑

实际上是一种更好的方法,无需调用ToList:
ChartAttributes = ChartAttributes.Where(a => !a.AttributeValue.Contains("PILOT"));

关于c# - 使用RemoveAll从列表中删除项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6523136/

10-11 14:32