我正在尝试使用lambda表达式根据该对象中的值从列表中删除某个对象.这是我的lambda:
ChartAttributes.ToList().RemoveAll(a => a.AttributeValue.Contains("PILOT"));
Run Code Online (Sandbox Code Playgroud)
这是ChartAttributes列表
IList<IChartAttribute> ChartAttributes
Run Code Online (Sandbox Code Playgroud)
这是上面列表中包含的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; }
Run Code Online (Sandbox Code Playgroud)
有一个图表属性,其AttributeKey设置为"PILOT".但这永远不会被删除.我究竟做错了什么?
谢谢
dka*_*man 12
您的代码正在执行IEnumerable,将其所有元素复制到列表中,然后从该副本中删除项目.源IEnumerable未被修改.
试试这个:
var list = ChartAttributes.ToList();
list.RemoveAll(a => a.AttributeValue.Contains("PILOT"));
ChartAttributes = list;
Run Code Online (Sandbox Code Playgroud)
编辑
实际上是一种更好的方式,无需致电ToList:
ChartAttributes = ChartAttributes.Where(a => !a.AttributeValue.Contains("PILOT"));
Run Code Online (Sandbox Code Playgroud)
ang*_*son 10
您打电话来.ToList()制作新列表,最后从该列表中删除该项目.
不管ChartAttributes是什么,你都没有触及那些内容.
基本上你是这样做的:
var newList = ChartAttributes.ToList();
newList.RemoveAll(...);
Run Code Online (Sandbox Code Playgroud)
如果您要检查此时的内容,newList您会注意到您的对象已被删除,但ChartAttributes(无论何种类型)仍然存在这些对象.
您必须直接从ChartAttributes中删除对象,但由于您没有说出哪种类型,我不能给您一个如何做到这一点的示例.
| 归档时间: |
|
| 查看次数: |
15846 次 |
| 最近记录: |