2013-07-16 52 views
0
public static int PlanetToIndex(string planetToSearch, List<Planet> pl) 
    { 
     for (int i = 0; i < pl.Capacity; i++) // out of range... 
      if (pl[i].Equals(planetToSearch)) 
       return i; 

     return -1; 
    } 

其C#簡單的搜索功能,似乎容量= 16,但超過14範圍...搜索功能超出範圍?

14是正確的價值,爲什麼MessageBox中顯示16?

此外,有你有名單我傳遞給函數(星球是抽象類),而不是

class Galaxy 
{ 
    public List<Planet> galaxy = new List<Planet>(); 
    Planet Ceres = new Planet.Ceres(); 
    Planet Pluto = new Planet.Pluto(); 
    Planet Europa = new Planet.Europa(); 
    Planet Venus = new Planet.Venus(); 
    Planet Sedna = new Planet.Sedna(); 
    Planet Jupiter = new Planet.Jupiter(); 
    Planet Void = new Planet.Void(); 
    Planet Eris = new Planet.Eris(); 
    Planet Mars = new Planet.Mars(); 
    Planet Uranus = new Planet.Uranus(); 
    Planet Neptune = new Planet.Neptune(); 
    Planet Saturn = new Planet.Saturn(); 
    Planet Earth = new Planet.Earth(); 
    Planet Mercury = new Planet.Mercury(); 

    public Galaxy() 
    { 
     galaxy.Add(Ceres); 
     galaxy.Add(Pluto); 
     galaxy.Add(Europa); 
     galaxy.Add(Venus); 
     galaxy.Add(Sedna); 
     galaxy.Add(Jupiter); 
     galaxy.Add(Void); 
     galaxy.Add(Eris); 
     galaxy.Add(Mars); 
     galaxy.Add(Uranus); 
     galaxy.Add(Neptune); 
     galaxy.Add(Saturn); 
     galaxy.Add(Earth); 
     galaxy.Add(Mercury); 
    } 
} 

回答

0

在你的循環,你需要使用

for (int i = 0; i < pl.Count; i++) 

容量是它可用於存儲空間的元素的量。試試這個只是爲了看看有什麼區別:

 List<int> intlist = new List<int>(); 
     intlist.Capacity = 32; 
     Console.WriteLine(intlist.Count); 
     Console.WriteLine(intlist.Capacity); 
     Console.In.Read(); 

輸出爲0和32,由於有數組中實際上沒有元素,但空間有32個元素。

0

我會建議使用計數

for (int i = 0; i < pl.Count(); i++) 
+0

哇...是啊,這說明一切...

1

我想你想使用pl.Countpl.Capacity

Capacity是內部數據結構在不調整大小的情況下可保存的元素總數。而Count是實際包含在列表中的元素的數量。

1

容量與Count不同。試試這個:

for (int i = 0; i < pl.Count; i++) 
    if (pl[i].Equals(planetToSearch)) 
     return i; 

或更好:

return pl.FindIndex(planet => planet.Equals(planetToSearch)); 
0

與尺寸固定的陣列不同,列表隨着尺寸的增大而調整尺寸。 List<T>.Capacity是允許您在需要調整大小之前獲取/設置列表大小的屬性。

See MSDN List.Capacity

容量是元素列表可以是必需的尺寸調整之前儲存,而計數是實際上是在列表元素的數目的數目。 容量總是大於或等於Count。如果在添加元素時計數超過容量,則通過在複製舊元素並添加新元素之前自動重新分配內部數組來增加容量。

因此,在你的榜樣,容量>計數