如何用LINQ替换嵌套循环 - 以干净,可管理的方式

Pat*_*urg 6 c# linq loops

Codewise,使用linq这是最干净的方法吗?下面,我有一个粗略的例子,我想找到一个基于名称的匹配类实例.

class item
{
   string name {get;set;}
   int identifier {get;set;}
}

void DoSomething()
{
  List<item> List1 = GetSampleItems();
  List<item> List2 = GetOtherSampleItems();

  for(int a=0;a<List1.count;a++)
  {
     for(int b=0;b<List2.count;b++)
     {
         if(List1[a].identifier == List2[b].identifier)
         { 
            List1[a].name = List2[b].name;
         }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 10

Linq用于查询而不是更新,因此您仍然需要循环搜索结果以进行更改,但您可以join匹配两个列表,如下所示:

var query = from l1 in List1
            join l2 in List2
                on l1.identifier equals l2.identifier 
            select new {l1, l2};
Run Code Online (Sandbox Code Playgroud)

现在循环查询以更新l1项目:

foreach(var item in query)
    item.l1.name = item.l2.name;
Run Code Online (Sandbox Code Playgroud)

作为旁注,你的方式没有任何问题(如果发现匹配,你可以突破内循环).如果您了解它的工作原理并且性能可以接受,那么就没有令人信服的理由来改变它.