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属性。