基于另一个列表中的项设置列表中项的属性

本文关键字:列表 属性 设置 另一个 | 更新日期: 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);
}