我在这里得到了一段漂亮的小代码,每次调用相关方法时都会无限制地自我传播:
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)";
并且该代码工作正常。
我原本以为每次声明一个新物体都会避免无休止的重复,但它仍然会发生。我错过了什么?
答案 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)”;不改变列表框项目。