2010-12-07 15 views
2

私は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()); 

すべてが参加者2のデータです。 3つのオブジェクトがある場合も同様です。最後に配列に送信されたデータがすべて反映されます。

オブジェクトの配列を持つことができますので、間違っているものがあるはずです。それとももっと良い方法がありますか?

+7

私は実際にあなたのループコードのいくつかを見せたいと思うかもしれませんが、私の考えはあなたの問題がそこにあるということです。 –

答えて

5

提示されたコードでは、私がそれを引き起こすと考えることができる唯一の方法は、backigフィールド(Participant)が "static"と宣言されている場合です。その場合は、「static」を削除してください。

実際のコードは2つのオブジェクトに対して "new"を実行しますか?または、オブジェクトを配列に追加した後にオブジェクトを上書きしますか? (これは配列内に同じオブジェクトが2回あることを意味します)。

天気の良い世界ではReferenceEquals(list[0], list[1])が間違っていると思いますが、これをテストしてお知らせください。

最終的な考え。実際のコードに "foreach"がありますか? infamous captured variable problem ...

+0

コードを見ることなく、私は不思議です。どのようにあなたはそんなに議論することができますか?何かエラーがありますか?] –

+0

@Jason - フォーマットに感謝します。 iPodにバックティックがありません... –

+1

@karthik - 私は非常にかすかな線の間を読むことに慣れています... –

0

ループを使用して配列を作成する場合は、参加者を割り当てるときにループインデックスを配列のインデックスとして使用するようにしてください。

0

デバッグは、過小評価されたスキルです。アレイを作成する行にブレークポイントを設定し、リストをウォッチとして追加し、内容を表示するように展開します。コードをステップ実行し、参加者を作成するときにパラメータにカーソルを置いて、渡される値を確認します。それらをリストに追加するステートメントを乗り越え、毎回正しい項目と値が配列にあり、既存の値が変更されていないことを時計で確認します。

+0

プログラミング中にデバッグは私の親友でした。このコードを使ってかなり長い間行ってきましたが、変数が静的に設定されていることは私にはあまりありませんでした。とにかく、ありがとう! :) – iamnobody

関連する問題