Visual Studio - C# 按一个属性比较两个列表并更改第一个列表的值



我有以下问题:我有两个 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

如果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;
    }
  }

相关内容

  • 没有找到相关文章

最新更新