1

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

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

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

现在 UpdateRecord 方法已更改,因此它返回 void 并且代码段将如下所示:

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

在这种情况下,项目将被更新,因为 Record 是一个引用类型。但它使代码不可读。

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

4

3 回答 3

1

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

我发现在这种情况下使用带有索引的 for 循环会更清晰一些,因为您正在尝试这样做非常明显。

于 2008-11-15T15:31:14.063 回答
1

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

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

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

foreach (Record item in RecordList) {
   item.Update(5);
}
于 2008-11-15T16:18:53.467 回答
0

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

foreach(Record item in RecordList){
  ..
  yield return GetUpdatedRecord(item, 5);
  ..
}
于 2008-11-15T15:36:47.983 回答