0

注意所有列表/ LINQ 爱好者,我有一个小挑战。

我有两个清单:

List<ObjectInfo> firstListObject;
List<ObjectInfo> secondListObject;

第一个列表是我用来管理数据的列表。随着过程的进行,我用来添加项目的第二个列表。所以,有时,我会在我的清单上添加/删除项目。

我有这些领域:

public int m_ObjectID { get;set; }
public bool m_IsSelected { get;set; }

我的意图是,每次我“更新” mysecondListObject时,我都需要滚动所有内容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;
}

嗯,在某种程度上,这行得通。它将我正在寻找的项目设置为真。默认情况下,所有m_IsSelected值都是假的。

但如果我删除该项目,它m_IsSelected仍然是真实的,这就是我需要做的。

所以,一句话:我需要在 中做一个循环firstListObject并检查secondListObject. 如果这是真的,我将切换m_IsSelected为真。我只需要确保 elsem_IsSelected是错误的,我不知道该怎么做......

4

2 回答 2

0

您可以首先将所有内容设置为 false,然后将您想要的设置为 true:

firstListObject.ForEach(o => o.m_IsSelected = false);
// your foreach goes here
于 2013-05-16T21:37:05.443 回答
0

所以这在很大程度上取决于你在此之前在做什么。如果您创建了 firsListObject 而根本没有修改它。然后列表中所有对象的 o.m_IsSelected 将为“false”,因为这是布尔值的默认初始化值,除非您将它们设置为不同的值。

然后,您只需要更新必须设置为 true 的对象。

如果您已更新列表并修改了已选择和未选择的内容,则需要刷新。然后 Kenneth 选项很好,然后您可以在初始化所有值后再次执行您的代码。

您还有第三个选项,您想一次性更新所有项目。你可以这样做:

foreach (var item in secondListObject)
{
    item.m_IsSelected = firstListObject.Any(x => x.m_ObjectID == item.m_ObjectID);
}
于 2013-05-17T12:31:49.407 回答