通过方法更改foreach中的项目

时间:2008-11-15 15:27:13

标签: c# methods foreach

让我们从以下代码段开始:

Foreach(Record item in RecordList){
  ..
  item = UpdateRecord(item, 5);
  ..
}

UpdateRecode函数更改item的某些字段并返回更改的对象。在这种情况下,编译器抛出一个异常,说明在foreach迭代中无法更新该项。

现在更改UpdateRecord方法,使其返回void,并且代码段如下所示:

Foreach(Record item in RecordList){
  ..
  UpdateRecord(item, 5);
  ..
}

在这种情况下,项目将被更新,因为Record是引用类型。但它使代码难以理解。

我正在开发的项目有很多foreach循环,几乎相同的代码一遍又一遍,所以我想创建更新部分记录的方法。有一个很好的方法来做到这一点?一个使代码更具可读性而不是进一步破坏它的一个?

3 个答案:

答案 0 :(得分:1)

如果你需要更新一个集合,不要像你说的那样使用迭代器模式,它要么容易出错,要么闻起来很糟糕。

我发现在这种情况下使用带索引的for循环更清楚一点,因为你试图这样做非常明显。

答案 1 :(得分:1)

编译器抱怨您无法更新集合,而不是记录。通过执行item = UpdateRecord,您将重新分配迭代器变量项。

我不同意UpdateRecord(第5项)在任何方面都是不可读的 - 但如果它让你感觉更好,那么扩展方法可能会让你更清楚地知道你正在改变项目的内容。

static void Update(this Record item, int value) {
   // do logic
}

foreach (Record item in RecordList) {
   item.Update(5);
}

答案 2 :(得分:0)

您需要更新相同的列表吗?你能否返回一个新的(更新的)枚举?

foreach(Record item in RecordList){
  ..
  yield return GetUpdatedRecord(item, 5);
  ..
}