一个更简单的例子可能是:
List <myElement> Elements;
Elements.Add(my1);
Elements.Add(my2);
my1和my2 eache有一个名为myString
的字符串类型的变量现在我要更改my1.myString的值。但是如果我改变它,my2.myString的值也会改变。
希望现在有点清楚了
我在C#中使用了包含多个元素的List。 List的类型是一个自定义类,里面有几个变量。
现在我想在一个list-element中更改变量的值。但不幸的是,价值不仅会被替换,而且还会被列入此列表的所有元素中。
有关如何解决这个问题的建议吗?
MyProjectElement File1 = this.Project.Elements[0];
MyProjectElement File2 = this.Project.Elements[1];
MyProject my1 = (MyProject)File1;
MyProject my2 = (MyProject)File2;
PageCount_F1 = my1.PageCount;
PageCount_F2 = my2.PageCount;
if (PageCount_F1 != PageCount_F2)
MessageBox.Show("The 2 files need to have the same file length", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
else
{
my1.IncludeAllPages = false;
my2.IncludeAllPages = false;
for(int i=1; i <= PageCount_F1; i++)
{
StringBuilder value1 = new StringBuilder();
StringBuilder value2 = new StringBuilder();
value1.Append("" + i);
value2.Append("" + (PageCount_F2-i+1));
MyProject my1new = new MyProject();
MyProject my2new = new MyProject();
my1new.Pages = value1.ToString();
my2new.Pages = value2.ToString();
my1.Pages = my1new.Pages;
my2.Pages = my2new.Pages;
this.Project.Elements.Add((myProjectElement)my1);
this.Project.Elements.Add((myProjectElement)my2);
((MyProject)this.Project.Elements[1]).Pages.Remove(0);
((MyProject)this.Project.Elements[i]).Pages.Remove(0);
((MyProject)this.Project.Elements[1]).Pages = "" + 1;
((MyProject)this.Project.Elements[PageCount_F2 - i + 1]).Pages = "" + (PageCount_F2 - i + 1);
((MyProject)this.Project.Elements[i-1]).Pages.Remove(0);
((MyProject)this.Project.Elements[i]).Pages.Remove(0);
((MyProject)this.Project.Elements[i - 1]).Pages = "" + i;
((MyProject)this.Project.Elements[i]).Pages = "" + (PageCount_F2 - i + 1);
}
答案 0 :(得分:2)
您需要指定进行更改的条件。例如:
myList.ForEach(x => if(whateverCondition) x.myString = "blah" );
但你真的需要确定那个条件是什么。
答案 1 :(得分:0)
问题在于,在您提出的代码中,您在循环中更改了值,该循环遍历每个元素,循环开始使用索引1索引List,而索引0中的第一个元素。 / p>
如果您只是在更改了一个元素后再选择该元素。 Moo-Juice发布了一个很好的建议(+1 btw)。
P.S。不要使用您的代码发布到外部商店的链接,许多位于企业防火墙后面的用户无法访问它们。