![](/img/trans.png)
[英]Checking if a list's item has a property contained in another list of items
[英]Setting a property of an item in a list based on items in another 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。 否则,该值必须为false
,这意味着如果某项首次落在列表中,然后又被删除,则该项的m_IsSelected
变为false。
谁能帮我吗? 谢谢!
编辑
到目前为止,这是我所做的:
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
仍然为true,这就是我需要做的。
因此,在一个句子:我需要在一个循环firstListObject
并检查是否有任何每个项目的“发现”(基于ID) secondListObject
。 如果是这样,我将m_IsSelected
切换为true。 我只需要确保其他m_IsSelected
为假,我不知道该怎么做...
您可以先将所有内容都设置为false,然后再将您想要设置为true:
firstListObject.ForEach(o => o.m_IsSelected = false);
// your foreach goes here
因此,这很大程度上取决于您在此之前所做的工作。 如果您创建了firsListObject而不进行任何修改。 然后,列表中所有对象的o.m_IsSelected将为“ false”,因为这是布尔值的默认初始化值,除非您将它们设置为其他值。
然后,您只需要更新必须设置为true的对象。
如果您已更新列表并修改了选择的内容和未选择的内容,则需要刷新。 那么Kenneth选项是好的,那么您可以在初始化所有值之后再次执行代码。
还有第三个选项,您想一次更新所有项目。 您可以这样做:
foreach (var item in secondListObject)
{
item.m_IsSelected = firstListObject.Any(x => x.m_ObjectID == item.m_ObjectID);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.