0

すべてのリスト / LINQ 愛好家に注意してください。小さな課題があります。

私は2つのリストを持っています:

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

最初のリストは、私がデータを管理するために使用するリストです。プロセスが進むにつれて項目を追加するために使用する 2 番目のリスト。そのため、時々、リストにアイテムを追加/削除します。

私はこれらのフィールドを持っています:

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

そして、私の意図は、を「更新」するたびにsecondListObject、すべてをスクロールして値をtruefirstListObjectに設定する必要があるということです。ELSE値は である必要があります。つまり、アイテムが最初にリストに表示され、その後削除された場合、アイテムは false になります。m_IsSelectedfalsem_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値が false です。

しかし、アイテムを削除してm_IsSelectedも、真実のままであり、それが私がする必要があることです.

つまり、文では: でループを作成し、firstListObjectの各項目の (ID に基づく) 「オカレンス」があるかどうかを確認する必要がありますsecondListObject。それが true の場合、を true に切り替えm_IsSelectedます。それ以外の場合m_IsSelectedはfalseであることを確認する必要がありますが、これはどうすればよいかわかりません...

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 オプションが適切である場合、すべての値を初期化した後にコードを実行することができます。

そして、すべてのアイテムを一度に更新する 3 つ目のオプションがあります。あなたがすることができます:

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