以紧凑的方式迭代两个列表

Mar*_*ker 2 c# linq

有没有比以下更紧凑的方法来编写一次迭代两个列表的循环:

var listA = new List<string>();
var listB = new List<int>();
foreach (var (itemFromListA, itemFromListB) in listA.Zip(listB, 
        (itemFromListA, itemFromListB)=>(itemFromListA, itemFromListB)){                
   // do something with itemFromListA and itemFromListB
}
Run Code Online (Sandbox Code Playgroud)

键入(itemFromListA, itemFromListB)三遍似乎不必要地繁琐,而且(itemFromListA, itemFromListB)=>(itemFromListA, itemFromListB)对于身份运算符来说,诸如此类的内容太长了。

Joh*_*ica 6

你可以这样写:

foreach (var (a,b) in listA.Zip(listB, ValueTuple.Create))
Run Code Online (Sandbox Code Playgroud)

网上试试

夏普实验室

  • @Ian H 它将创建一个新的枚举器对象,但 valueTuple 是一个值类型,因此它不会导致每个项目的任何堆分配。因此,所需的垃圾收集量应该与收集大小无关。由于枚举器开销,它会比常规 for 循环慢一点,但这在大多数情况下并不重要。 (2认同)