using System.Collections.Generic;
public int Index { get; set; }
public bool State { get; set; }
public static void Main()
List<A> list1 = new List<A>() {
new A(){ Index = 1, State = false },
new A(){ Index = 2, State = false },
new A(){ Index = 3, State = true },
new A(){ Index = 4, State = false },
new A(){ Index = 5, State = false },
List<A> list2 = new List<A>() {
new A(){ Index = 1, State = false },
new A(){ Index = 2, State = true },
new A(){ Index = 3, State = false },
new A(){ Index = 4, State = false },
new A(){ Index = 5, State = false },
new A(){ Index = 6, State = true },
new A(){ Index = 7, State = false },
Dictionary<int, A> dict = list1.ToDictionary(x => x.Index, y => y);
foreach (var item in list2)
if (dict.ContainsKey(item.Index)) {
dict[item.Index].State &= item.State;
dict.Add(item.Index, item);
foreach (int key in dict.Keys)
Console.WriteLine("{0} {1}", key, dict[key].State);