C# 比较两个列表的一个属性和值的第一个列表中更改

发布时间: 2017/2/25 15:07:59
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下的问题︰ 我有两个列表类型 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:

如果 ID 是独特内 list_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;
    }
  }
官方微信
官方QQ群
31647020