C#将两个列表与一个属性进行比较,并更改第一个列表的值

时间:2016-07-14 08:49:58

标签: c# visual-studio linq logic

我有以下问题: 我有两个foo类型的列表。 现在我想迭代两个列表,就像在第二个列表中我更改了两个属性的值。 为了澄清我的意思,这里的代码我知道它会起作用:

foreach(foo bar in list_1) {
  foreach(foo bar2 in list_2) {
    if (bar.ID == bar2.ID) {
      bar.name = bar2.name;
      bar.color = bar2.color;
    }
  }
}

如您所见,list_2中的属性确实具有list_1中的其他值,但我在list_1中也需要它们。 它会这样工作,但我想知道是否会有更简单的方法(也许使用LinQ?)

亲切的问候, Asat0r

1 个答案:

答案 0 :(得分:1)

如果IDlist_2内是唯一的,您可以通过将列表转换为词典来实现更快的实施(对于大型列表)

  // A little bit of Linq: ToDictionary 
  var dict = list_2.ToDictionary(item => item.ID, item => item);
  ...
  foreach (item in list_1) {
    foo master;

    if (dict.TryGetValue(item.ID, out master)) {
      item.name = master.name; 
      item.color = master.color;
    }
  }