2011-12-13 67 views
-3

一個更簡單的例子可能是:在列表的元素替代變量

List <myElement> Elements; 
Elements.Add(my1); 
Elements.Add(my2); 

MY1和MY2 eache有一個名爲string類型的myString

現在我想改變MY1的值的變量。 MyString的。但是,如果我改變它的值my2.myString得到改變。

希望這是更清楚一點,現在


我使用了一個列表,在C#它包含幾個要素。該列表具有一個自定義類,其中包含多個變量。

現在我想在一個列表中更改一個變量的值。但不幸的是,價值被取代不僅在這個,而且在這個列表的所有元素。

有關如何解決此問題的任何建議?

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

這不是一個簡單明瞭的例子。你能用一個很短的例子來說明嗎?很難分辨出由於噪音而造成的所有元素。 –

+1

問題與代碼發佈相比,您能否更清楚一點? –

+0

對於它的價值,[這裏是所有''「+ x」和格式化和縮進固定的代碼](http://codepad.org/ibMxUgNn)。 – Ryan

回答

2

您需要指定條件進行更改。例如:

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

但你真的需要確定該條件是什麼。

+0

嘿Moo-Juice,謝謝你的提示。我會用這個來嘗試。 – joma

0

問題是,在你已經提出的代碼中,你改變了你的值,在逐步遍歷每個元素的循環中,循環開始用索引1索引列表,而索引0中的第一個元素。

如果您只是在更換了一個元素後才選擇該元素。 Moo-Juice發佈了一個很好的建議(+1 btw)。

p.s.請勿使用您的代碼發佈鏈接到外部商店,許多坐在企業防火牆後面的用戶無法訪問它們。