C# 通过方法更改foreach中的项目
让我们从以下片段开始:C# 通过方法更改foreach中的项目,c#,methods,foreach,C#,Methods,Foreach,让我们从以下片段开始: Foreach(Record item in RecordList){ .. item = UpdateRecord(item, 5); .. } updateCode函数更改item的某些字段并返回更改后的对象。在这种情况下,编译器抛出一个异常,表示该项不能在foreach迭代中更新 现在,UpdateRecord方法已更改,因此它将返回void,代码段如下所示: Foreach(Record item in RecordList){ .. Upd
Foreach(Record item in RecordList){
..
item = UpdateRecord(item, 5);
..
}
updateCode函数更改item的某些字段并返回更改后的对象。在这种情况下,编译器抛出一个异常,表示该项不能在foreach迭代中更新
现在,UpdateRecord方法已更改,因此它将返回void,代码段如下所示:
Foreach(Record item in RecordList){
..
UpdateRecord(item, 5);
..
}
在这种情况下,项目将被更新,因为记录是引用类型。但它使代码无法读取
我正在处理的项目有很多foreach循环,它们反复使用几乎相同的代码,所以我想创建一些方法来更新部分记录。有什么好办法吗?使代码更具可读性而不是进一步破坏它的方法?如果需要更新集合,不要使用迭代器模式,就像您所说的那样,它要么容易出错,要么味道不好
我发现在这种情况下,使用带有索引的for循环会更清晰一些,因为很明显,您正试图用这种方式来做什么。是否需要更新相同的列表?是否可以返回一个新的(更新的)枚举
foreach(Record item in RecordList){
..
yield return GetUpdatedRecord(item, 5);
..
}
编译器抱怨您无法更新集合,而不是记录。通过执行item=UpdateRecord,可以重新分配迭代器变量item 我不同意UpdateRecord(第5项)在任何方面都是不可读的,但如果它让您感觉更好,扩展方法可能会更清楚地表明您正在更改第5项的内容
static void Update(this Record item, int value) {
// do logic
}
foreach (Record item in RecordList) {
item.Update(5);
}
谢谢,我认为这是在我的情况下唯一正确的方法。使用迭代器模式更新集合中的项绝对没有错。您不想在迭代时从集合中添加或删除项,这正是编译器所抱怨的。谢谢您的评论。就我而言,收益率不是一个选项。但我会记住的,它可能是有用的。。。