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
或其他任何意外的内容。