使用列表框中对象的属性

时间:2010-07-30 16:32:00

标签: c# listbox string casting

我在这里得到了一段漂亮的小代码,每次调用相关方法时都会无限制地自我传播:

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

并且该代码工作正常。

我原本以为每次声明一个新物体都会避免无休止的重复,但它仍然会发生。我错过了什么?

2 个答案:

答案 0 :(得分:3)

如果您只想追加" (label)"一次,可以执行以下操作:

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

这是你想要做的吗?

当您将" (label)"附加到.Name属性时,.Name属性将替换为您最后使用" (label)"创建的新字符串。

答案 1 :(得分: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属性改变了什么的name属性它引用 - ListBox中的项目。上面列出的代码只是将epicObject.name设置为所选名称+“(label)”;不改变列表框项目。