2010-07-30 39 views
2

我有這個漂亮的小片的代碼在這裏,自我propogates循環往復每一個相關的方法被稱爲時間:在ListBox使用對象的屬性

if (this.ListBox_MyListBox.Items[e.Index] is MyObject) 
        { 
         MyObject epicObject= new MyObject(); 
         epicObject= (MyObject)this.ListBox_MyListBox.Items[e.Index]; 
         epicObject.Name = epicObject.Name + " (label)"; 

問題的方法是單擊事件,不幸的是,每次點擊時,都會在名稱字符串的末尾添加另一個「(標籤)」。

在其他地方,我有一個非常類似的情況,並不需要鑄造

if (this.ListBox_MyListBox.Items[e.Index] is String) 
        { 
    string tag = (string)this.ListBox_SmartSetOptions.Items[e.Index]+ " (tag)"; 

和代碼工作正常。

我曾經想過,每次聲明一個新對象都會避免無盡的重複,但它仍然在發生。我錯過了什麼?

回答

3

如果你只是想追加" (label)"一次,你可以做這樣的事情:

if (!epicObject.Name.EndsWith(" (label)")) 
{ 
    epicObject.Name += " (label)"; 
} 

這就是你想做什麼?

當您將" (label)"附加到.Name屬性時,.Name屬性將由您最後創建的新字符串替換爲" (label)"

+0

+1,是的,我自己也想到了這個,但是希望這樣做可避免每次都解析name屬性。 – 2010-07-30 18:24:08

0

這個代碼看起來非常奇怪,我,我想你正在試圖做更多的東西一樣

if (this.ListBox_MyListBox.Items[e.Index] is MyObject) 
       { 
        epicObject.Name = ((MyObject)this.ListBox_MyListBox.Items[e.Index]).Name + " (label)"; 

你得到ListBox中的附屬物的原因是因爲你設置epicObject在項目實際上使它成爲對象的引用的ListBox,然後改變epicObject上的Name屬性來改變它引用的名稱屬性 - ListBox中的項目。我上面列出的代碼只是將您的epicObject.name設置爲所選名稱+「(label)」;不改變列表框項目。