【发布时间】:2020-11-27 18:46:37
【问题描述】:
我有多个相同类型的数组(目前是 2 个),我需要对这些数组执行类似的操作。
Custom[] array1 = new Custom[10];
Custom[] array2 = new Custom[20];
// Assign values to array1 and array2
foreach(var v in array1)
{
// Do some operations
}
foreach(var v in array2)
{
// Do some operations
}
在foreach loops 中,我都在对数组中的对象进行类似的操作。
这些操作确实会根据条件修改数组中对象的某些属性。
有什么方法可以合并foreach loops?
我想维护两个数组,因为它们在进程结束时,所以不能将一个数组复制到另一个数组或类似的东西。我还想避免创建一个包含两个合并数组的新数组(我认为这可能会导致空间问题,因为此处的自定义可以是值类型或引用类型)。
我发现的一个解决方案是拥有一个包含foreach loop 的单独函数,然后为多个数组调用该函数。
private void DoOperations(Custom[] array)
{
foreach(var v in array)
{
// Do some operations
}
}
// In main
DoOperations(array1);
DoOperations(array2);
我只是想知道是否有任何其他方法可以实现这一点,因为我需要更多这样的foreach loops,其中一些包含非常琐碎的代码。
【问题讨论】:
-
“我发现的一个解决方案是使用一个包含 foreach 循环的单独函数,然后为多个数组调用该函数。”这是最好的解决方案,因为它减少了代码重复。对未来的读者来说非常清楚。
-
@HimBromBeere 我目前使用的是相同的。虽然我包含更多类似的 foreach 循环,但它们可能包含的代码非常少,例如将单个属性值增加一或这样。每一个这样的操作都需要一个单独的函数,这有点矫枉过正。
-
将单独的任务提取到一个函数中永远不会过分,恕我直言,因为它使您的代码更清晰,更容易理解。因此,即使您仅在单个位置调用该代码,也值得考虑将其重构为自己的方法。除此之外,您总是可以考虑将所有 相似的东西重构为一个通用结构 - 例如一个方法,为了不重复自己。
-
是的,这种更好更干净的方法,请发布您的代码作为答案。
-
@Jasmeet 如前所述,函数可能是解决此问题的最佳方法。还要考虑当另一个人必须维护您的代码并且必须搜索特定的 foreach 循环来更改某些内容时是什么情况。如果你选择一个“好”的函数名,那么函数会更清楚你在循环中所做的事情。