C# 在列表框中使用对象的属性

C# 在列表框中使用对象的属性,c#,listbox,string,casting,C#,Listbox,String,Casting,我这里有一段漂亮的小代码,每次调用相关方法时,它都会自动传播: if (this.ListBox_MyListBox.Items[e.Index] is MyObject) { MyObject epicObject= new MyObject(); epicObject= (MyObject)this.ListBox_MyListBox.Items[e.Ind

我这里有一段漂亮的小代码,每次调用相关方法时,它都会自动传播:

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)";
所讨论的方法是一个click事件,不幸的是,每次单击时,它都会在名称字符串的末尾添加另一个“(label)”

在其他地方,我有一个非常类似的情况,不需要演员阵容

if (this.ListBox_MyListBox.Items[e.Index] is String)
                    {
    string tag = (string)this.ListBox_SmartSetOptions.Items[e.Index]+ " (tag)";
代码运行良好


我原以为每次声明一个新对象可以避免无休止的重复,但它仍然在发生。我缺少什么?

如果您只想附加一次
“(标签)”
,可以执行以下操作:

if (!epicObject.Name.EndsWith(" (label)"))
{
    epicObject.Name += " (label)";
}
这就是你想做的吗


当您将
(label)
附加到
.Name
属性时,
.Name
属性将被您正在创建的新字符串所替换,该字符串的末尾是
(label)

我觉得这段代码非常奇怪,我认为您正在尝试执行类似的操作

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设置为所选名称+“(标签)”;不更改列表框项。

+1,是的,我自己也想过,但希望这样做可以避免每次解析name属性。