基于另一个列表中的项设置列表中项的属性
本文关键字:列表 属性 设置 另一个 | 更新日期: 2023-09-27 18:14:04
所有list/LINQ爱好者注意了,我有一个小挑战要给你们。
我有两个列表:
List<ObjectInfo> firstListObject;
List<ObjectInfo> secondListObject;
第一个列表是我用来管理数据的列表。第二个列表用于随着流程的进行添加项目。所以,时不时地,我会在我的清单上添加/删除项目。
我有这些字段:
public int m_ObjectID { get;set; }
public bool m_IsSelected { get;set; }
我的意图是每次我"更新"我的secondListObject
时,我需要滚动所有firstListObject
以将m_IsSelected
值设置为true。ELSE值必须是false
,这意味着如果一个项目第一次出现在列表中,然后被删除,该项目的m_IsSelected
为假。
编辑
到目前为止我所做的是:
foreach (var singleOrDefault in secondListObject
.Select(objectInfo => firstListObject
.SingleOrDefault(_item => _item.m_ObjectID == inventoryInfo.m_ObjectID))
.Where(singleOrDefault => singleOrDefault != null))
{
singleOrDefault
.m_IsSelected = true;
}
在某种程度上,这是可行的。它将我正在查找的项设置为true。默认情况下,m_IsSelected
的值都为false。
但是如果我删除了项目,m_IsSelected
仍然为真,这就是我需要做的。
所以,在一个句子中:我需要在firstListObject
中创建一个循环,并检查secondListObject
的每个项目是否有任何"出现"(基于ID)。如果这是真的,我将把m_IsSelected
切换为true。我只需要确保m_IsSelected
是假的,我不知道怎么做…
你可以先把所有的设置为假,然后只把你想要的设置为真:
firstListObject.ForEach(o => o.m_IsSelected = false);
// your foreach goes here
所以这很大程度上取决于你在此之前正在做什么。如果您在没有修改的情况下创建了第一个listobject。然后,列表中所有对象的o.m_IsSelected将为"false",因为这是布尔值的默认初始值,除非您将它们设置为不同的值。
那么你只需要更新那些必须被设置为true的对象。
如果您已经更新了列表并修改了选择和不选择的内容,并且需要刷新。那么Kenneth选项是好的,那么你就可以在初始化所有的值之后再执行你的代码。
你还有第三个选择,你想一次更新所有的项目。你可以这样做:
foreach (var item in secondListObject)
{
item.m_IsSelected = firstListObject.Any(x => x.m_ObjectID == item.m_ObjectID);
}