让我们从以下代码段开始:
Foreach(Record item in RecordList){
..
item = UpdateRecord(item, 5);
..
}
UpdateRecode函数更改item的某些字段并返回更改的对象。在这种情况下,编译器抛出一个异常,说明在foreach迭代中无法更新该项。
现在更改UpdateRecord方法,使其返回void,并且代码段如下所示:
Foreach(Record item in RecordList){
..
UpdateRecord(item, 5);
..
}
在这种情况下,项目将被更新,因为Record是引用类型。但它使代码难以理解。
我正在开发的项目有很多foreach循环,几乎相同的代码一遍又一遍,所以我想创建更新部分记录的方法。有一个很好的方法来做到这一点?一个使代码更具可读性而不是进一步破坏它的一个?
答案 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);
..
}