c# - 索引集合

标签 c#

我有几个属性:

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 循环中对结果序列的每个元素执行“最终”必要的副作用(您没有向我们展示),而不是通过循环后重新执行查询。

关于c# - 索引集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5359970/

相关文章:

c# - 使用两个不同的混淆器处理同一个 .NET 程序集

c# - 验证是否使用 moq 调用 linq 扩展方法

c# - Entity Framework 6 和 mysql 的问题

c# - 选择后 ContextMenu 不会消失。

C# 对字符串数字进行加/减

c# - 选择哪个 WinForms CompositeUI 框架?

c# - 关于e.Item.ItemIndex的初学者问题

c# - 在 C# 中以编程方式查找 Windows 文件夹

c# - 枚举产生方法时可能不会调用 finally block

c# - 调用 FinishedPlaying 事件时如何处理 AVAudioPlayer?