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)”;不改变列表框项目。