2011-07-25 8 views
1

配列からオブジェクトを削除しようとしていて、同じタイプのオブジェクトですべてのプロパティを0で埋めようとしています。しかし、これを行うと、配列の値を再計算するときに何らかの理由で値がクリアされません。配列内のオブジェクトを正しく置き換えるには - C#

ここでは、オブジェクトを消去してその場所に空白を挿入する方法を示します。

public void clearOutBox(int arraySlot) 
    { 
     itemsInbuildArray.Remove(itemsArray[arraySlot]); 
     itemsInbuildArray.Insert(arraySlot, blank); 
     itemInBuildPictureArray[arraySlot].ImageLocation = null; 
     statCalculation(); 
    } 

    //one of the lines from the statCalculation method. 
    statsHealth.Text = (Convert.ToString(itemsInbuildArray.Sum(hp => hp.Health))); 

     public partial class Form1 : Form 
{ 
    List<Item> itemsArray = new List<Item>(); 
    List<PictureBox> itemInBuildPictureArray = new List<PictureBox>(); 
    List<ToolTip> itemInBuildTooltipArray = new List<ToolTip>(); 
    List<Item> itemsInbuildArray = new List<Item>(); 
      Item blank = new Item(); // this is one of several objects created here 
} 

は、私はそれでこれらの空白の項目の6の配列を初期化し、値を1で空白の項目を交換するが、それはいただきました!私の問題を引き起こして削除問題はありません。

私はこれをやっているより多くの可能性のあるnoobish方法を許してください、私はちょうどC#を開始し、学習経験としてこのプロジェクトをやっています。すべての入力をいただければ幸いです!

+2

なぜ 'itemsInbuildArray [arraySlot] = blank'ですか? –

+0

この「空白」オブジェクトはどこから来ていますか(コードの4行目)、どのように作成しますか? – Svilen

+0

もう少し情報を与える必要があります - あなたは3つの配列のようなオブジェクトを持っているようです - 少なくとも1つのitemsInbuildArrayは実際には配列ではなくArrayListです。 – iandotkelly

答えて

1

なぜ直接だけではなく、インデックス、それを:あなたの配列の6番目のスロットで参照されているものは何でも変更する予定です

int index = 5; 
array[index] = new Foobar(); // whatever your class is 

「空白」と呼ばれる単一の参照を使用して、それらを決して変更しないとわからない限り、複数の配列スロットに入れないでください。それらが参照型の場合、それらのうちの1つを変更すると、それらをすべて変更します。

+0

ブランクはオブジェクトの名前に過ぎません。彼らはすべての項目が入力されたときに値が計算され、そこに何かがない場合にはクラッシュするので、最初は空白にする必要があります – Mike

+0

これは私の問題を解決しました!私はちょうどそれをあなたに感謝して複雑に終わったと思う。 – Mike

関連する問題