数组为所有索引返回相同的值

时间:2010-12-07 18:21:42

标签: c# arrays

我创建了一个名为Participant的对象。 现在我想拥有一个Participant对象数组,以便我可以在数据网格中显示它们。

以下是我尝试的代码(为了更好地理解问题,我删除了循环和数据网格代码):

Participant[] list = new Participant[count];
Participant one = new Participant(name, address);
Participant two = new Participant(name2, address2);

list[0] = one;
list[1] = two;

然而,当我以这种方式通过消息框获得一个参与者的值时,

MessageBox.Show(list[0].getName());

它反映的是参与者二的数据。如果我有3个对象也是如此,它反映的是最后发送到数组中的数据。

我知道有可能有一些对象,所以必须有一些我做错了。或者有更好的方法吗?

3 个答案:

答案 0 :(得分:5)

使用所呈现的代码,我能想到的唯一方法就是将backig字段(在Participant中)声明为“static”。如果是,请删除“static”。

否则;实际代码是否为这两个对象执行“new”?或者在将对象添加到数组后覆盖它? (这意味着你在数组中有两次相同的对象。)

我希望ReferenceEquals(list[0], list[1])在一个理智的世界中是假的 - 你能测试一下并让我们知道吗?

最后的想法;真实代码中有“foreach”吗?它可能是infamous captured variable problem ......

答案 1 :(得分:0)

如果您使用循环来填充数组,请确保在分配参与者时使用循环索引作为数组的索引。

答案 2 :(得分:0)

调试是一种被低估的技能...在创建数组的行上设置断点并将列表添加为监视,然后展开它以便查看内容。在创建参与者时,逐步执行代码并将鼠标悬停在参数上,以查看传递的值。跳过将它们添加到列表中的statemens,并在监视中验证每次数组中的正确项和值以及现有值是否未更改。