替换List元素中的变量

时间:2011-12-13 16:52:11

标签: c#

一个更简单的例子可能是:

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);
}            

2 个答案:

答案 0 :(得分:2)

您需要指定进行更改的条件。例如:

myList.ForEach(x => if(whateverCondition) x.myString = "blah" );

但你真的需要确定那个条件是什么。

答案 1 :(得分:0)

问题在于,在您提出的代码中,您在循环中更改了值,该循环遍历每个元素,循环开始使用索引1索引List,而索引0中的第一个元素。 / p>

如果您只是在更改了一个元素后再选择该元素。 Moo-Juice发布了一个很好的建议(+1 btw)。

P.S。不要使用您的代码发布到外部商店的链接,许多位于企业防火墙后面的用户无法访问它们。