【发布时间】:2016-07-06 13:45:25
【问题描述】:
我有一个对象,它存储两个字符串并覆盖 ToString() 方法以返回其中一个字符串
fooBar temp;
foreach (string foo in bar)
{
temp = new fooBar(); <--- Why is this line needed when I
am overwriting the code and path on each cycle before adding?
temp.code += ".";
temp.path += ".";
Console.WriteLine(temp);
clbFooBar.Items.Add(temp);
}
到控制台的打印遵循被覆盖的代码和路径字符串值,但是选中的列表框项都是完全相同的(最后一项的 ToString()),正在进行的底层过程不是很明显?
如果我将其更改为clbFooBar.Items.Add(temp.ToString());,它绝对可以正常工作,但这与temp.ToString.ToString() 不一样,因为.Add 首先调用.ToString()?我认为控制台打印和.Add 的行为相同,因为它们都调用ToString()
编辑:temp = new fooBar(); 是解决我的问题的方法,我只想知道为什么这是解决方法,因为直觉让我认为覆盖两个字符串(代码和路径)就足够了,为什么没有这个重新初始化时,选中列表框中的所有项目都是相同的。
【问题讨论】:
-
如果您删除
temp = new fooBar();这一行,它们是否相同? -
不,控制台打印和选中的列表框只有在该行存在时才会相互反映,这对我来说没有意义。
-
我的意思是,如果该行 not 存在,则选中列表框中的项目看起来都相同,但如果该行 is 则(正确)不同> 现在?
-
没错!同样, clbFooBar.Items.Add(temp.ToString()) 也可以,但我不确定这是否仍然允许我访问对象中的其他字符串。
-
你能编辑问题并添加一个简单的代码来重现问题。包含您的课程。目前(对我来说)不清楚你在问什么。
标签: c# winforms checkedlistbox