Skip to main content
 首页 » 编程设计

c#之索引集合

2024年02月23日33lori

我有几个属性:

MyModel{ 
public int var1 {get;set;} 
public int var2 {get;set;} 
public int TheIndex {get;set;} 
} 

我使用这个模型来填充列表:

var Output = .... select new MyModel {... TheIndex = 0, ...}; 

然后,我想用以下内容填充每个元素的索引:

int index = 0; 
foreach (var a in Output) { a.TheIndex = index++; } 

但是,我很困惑为什么它没有像我认为的那样添加索引。相反,它在整个集合中停留在 0。

有什么想法吗?

谢谢。

请您参考如下方法:

正在添加索引。问题是您正在改变通过查询 流出的对象。我猜您随后会重新执行查询并期望这些突变以某种方式“持久化”到查询中,其方式将反射(reflect)在查询的新结果中。 LINQ 查询不是这样工作的:查询表达式的结果是一个查询,而不是查询的结果。每次枚举结果时,查询都会再次运行。在您的情况下,将再次创建 MyModel 的新实例,因此对旧实例执行的更改将丢失。

一些可能的修复:

  1. 为查询本身中的每个元素构建适当的索引。
  2. 将查询具体化为一个集合(例如使用 ToList() 调用),然后改变集合的元素。
  3. 在 inside foreach 循环中对结果序列的每个元素执行“最终”必要的副作用(您没有向我们展示),而不是通过循环后重新执行查询。