我有点困惑为什么这里的逻辑不起作用,我觉得我已经盯着这段代码太久了,以至于我在这里遗漏了一些东西。我有这个方法被另一个方法调用:
private async Task<bool> Method1(int start, int end, int increment, IEnumerable<ModelExample> examples)
{
for (int i = start; i<= end; i++)
{
ModelExample example = examples.Where(x => x.id == i).Select(i => i).First();
example.id = example.id + increment; //Line X
// do stuff
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
我调试了上面的代码,似乎当“Line X”执行时,不仅 example.id 单独更改,而且现在列表“examples”中的示例已更新为新的 id 值。我不知道为什么?我希望列表“examples”在整个 for 循环中保持不变,我很困惑为什么更新 example.id 的值也会在列表中更新它?
(即,如果“Line X”之前的列表有一个 id = 0 的条目,在“Line X”之后,同一条目的 id 更新为 1,我如何在此处保持变量“examples”不变?)
任何帮助表示赞赏,谢谢。
您的列表如下所示:
+---------------+
| List examples | +-----------+
+---------------+ | Example |
| | +-----------+
| [0] ---------------> | Id: 1 |
| | | ... |
+---------------+ +-----------+
| |
| [1] ---------------> +-----------+
| | | Example |
+---------------+ +-----------+
| | | Id: 2 |
| ... | | ... |
| | +-----------+
+---------------+
Run Code Online (Sandbox Code Playgroud)
换句话说,您的列表仅包含对示例的引用,而不是副本。因此,您的变量example引用右侧的实体之一并就地修改它。
如果您需要副本,则需要自己创建一个。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |