繁体   English   中英

根据另一个列表中的项目设置列表中项目的属性

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM