2017-06-21 45 views
0

嗨,我想安装简单的测试数据。c#收集和重新编号不按预期工作

我只是想采取一个小集合,并通过添加多次使其更大。

在我将它们加在一起后,我想重新编号属性LineNumber ,以便没有重复并且按顺序排列。 1,2,3,4 ....

无论我尝试它,似乎不工作,我不能看到错误。

var sampleTemplateLine = dataContext.TemplateFileLines.ToList(); 


*//tired this doesnt work either*   
//List<TemplateFileLine> lineRange = new List<TemplateFileLine>(); 
//lineRange.AddRange(sampleTemplateLine); 
//lineRange.AddRange(sampleTemplateLine); 
//lineRange.AddRange(sampleTemplateLine); 
//lineRange.AddRange(sampleTemplateLine); 

var allProducts = sampleTemplateLine 
         .Concat(sampleTemplateLine) 
         .Concat(sampleTemplateLine) 
         .Concat(sampleTemplateLine) 
         .ToList(); 
int i = 1; 
foreach (var item in allProducts) 
{ 
    item.LineNumber = i; 
    i++; 
} 

这似乎没有工作,要么

//re-number the line number 
    var total = allProducts.Count(); 
    for (int i =0; i < total; i++) 
    { 
     allProducts[i].LineNumber = i+1; 
    } 

问题:下面RETURN 4时,我很期待1

var itemthing = allProducts.Where(x => x.LineNumber == 17312).ToList(); 
+4

总之 - 问题是当你添加同样的列表4次,你有4个引用新列表中的同一个对象。当你编辑其中一个 - 你编辑所有(4)。 –

回答

4

你加入相同的对象多次。你必须添加新的对象或克隆你拥有的对象。

0

问题是他们指向同一个对象。因此,如果更改属性,它将更改所有相同的对象

如果存在,则可以使用Clone方法,如果不存在,则可以创建自己的克隆方法,如question

+1

OPs代码已经包含了'AddRange'调用(注释掉),它和Concat的问题完全相同。 –

+0

谢谢,但我已经厌倦了包括这件事...... Bojan指出我在正确的方向,但似乎是一个克隆任务。 – Seabizkit

+0

@Damien_The_Unbeliever是的,我没有注意到,谢谢。 – jackjop