2012-03-07 21 views
-1
static void Main(string[] args) 
    { 
     minlist<authorinfo> aif = new minlist<authorinfo>(); 
     aif.Add(new authorinfo("The Count of Monte Cristo","Alexandre", "Dumas", 1844)); 
     aif.Add(new authorinfo("Rendezvous with Rama", "Arthur", "Clark", 1972)); 
     aif.Add(new authorinfo("The Three Musketeers", "Alexandre", "Dumas", 1844)); 
     aif.Add(new authorinfo("2001: A Space Odyssey", "Arthur", "Clark", 1968)); 

4つのアイテム、正しいアイテムが追加されないのはなぜですか?

class minlist<T> 
{ 
    T[] storage = new T[3]; 
    T[] storagereplace = new T[5]; 
    T[] storagereplace2 = new T[10]; 
    int spot = 0; 

    public void Add(T obj) 
    { 
     if (spot != 3) 
     { 
      storage[spot] = obj; 
      spot++; 
      if (spot == 3) 
      { 
       int spot2 = spot; 

       storage.CopyTo(storagereplace, 0); 
       storagereplace[spot2] = obj; 
       spot2++; 
       foreach (T k in storagereplace) 
       { 
        Console.WriteLine(k); 
       } 
       Console.WriteLine(spot2); 
      } 
     } 

結果:

アレクサンドル、デュマ、モンテ・クリスト伯、1844

アーサー、クラーク、宇宙のランデヴー、1972

アレクサンドル、Dumas、Three Musketeers、1844

Alexandre、Dumas、Three Musketeers、1844

2001年を追加するのではなく、最後のものを繰り返すのはなぜですか?このため

答えて

3

if (spot != 3) 
    { 
     storage[spot] = obj; 
     spot++; 
     if (spot == 3) 
     { 
    // etc. 

このコードが何をするかを考えるスポットが2である場合はstorage[2] = objを設定し、その後、スポットに1を加え、spot == 3ことと、あまりにも、storagereplace[3] = objを設定して検索します。

ちょうど好奇心から:あなたは既存のList<T>クラスを使用する代わりにリストクラスをそのように実装していますか?

まだ、あなたのクラスにはかなりの問題があります。同様に、スポットが3より大きい場合、storage[spot] = objは例外になります。

独自のコレクションクラスを実装するのに本当に良い理由がない限り、List<T>などを使用するとよく似ています。

+0

スポット++の配置とメソッドの終了については確かですか?私はそれを行うときに何も表示されません。 – saturn

+0

いいえ、私は私の答えを改訂しました。独自のListクラスを作成する必要がない場合は、リストを使用してください。 – Botz3000

関連する問題