可能的多重枚举场景.如何处理?

  • 本文关键字:何处理 处理 枚举 c#
  • 更新时间 :
  • 英文 :

public IEnumerable<ComputedData> Compute (IEnumerable<DataSet> data, IEnumerable<Variations> variationData)
{
// I need to create one ComputedData instance for each item inside the IEnumerable<DataSet> data 
// DataSet has properties:  int ID, int Valu1, int Value2
// ComputedData has properties: int ID, int Result, int Variation
// variationData has properties: int ID, int Variation
var computedDate = data.Select (i => new ComputedData ()
{
ID = i.ID,
Result = i.value1 + i.value2
});
// ISSUE is here
foreach (var item in computedDate )
{
var id = item.ID;
// I need to find the corresponding element 
// (with same ID) on IEnumerable<Variations> variationData
// and assign item.Variation = 
// But getting Possible Multiple Enumeration warning
// and item.Variation become zero always !
}
}

问题是foreach循环的使用。还有其他方法可以解决这个问题吗?即使代码有效,道具。变化总是零。情况不应该是这样的。有什么建议吗?

此警告是为了确保每次迭代computeDate中的项时不会重新执行此:

var computedDate = data.Select(i => new ComputedData()
{
ID = i.ID,
Result = i.value1 + i.value2
}).

可以重新执行产生IEnumerable<DataSet> data的任何方法。

处理这个问题的方法很少。一个简单的方法是添加:

var computedDate = data.Select(i => new ComputedData()
{
ID = i.ID,
Result = i.value1 + i.value2
}).ToArray(); // <---- Add this

在这行代码枚举了data中的项目之后,结果存储在一个数组中,这意味着您可以安全地一次又一次地枚举它,而无需执行此Select或其他任何意外的内容。

相关内容

  • 没有找到相关文章

最新更新