搜索功能超出范围?

时间:2013-07-16 00:44:03

标签: c# list search range

    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?!

另外,你有List我传递给函数(Planet是抽象类)

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);
    }
}

5 个答案:

答案 0 :(得分:1)

我认为您要使用pl.Count,而不是pl.Capacity

Capacity是内部数据结构在不调整大小的情况下可以容纳的元素总数。虽然Count是List中实际包含的元素数。

答案 1 :(得分:1)

容量与Count不同。试试这个:

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

或更好:

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

答案 2 :(得分:0)

我建议使用计数

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

答案 3 :(得分:0)

在你的for循环中,你需要使用

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个元素的空间。

答案 4 :(得分:0)

与固定大小的数组不同,列表会随着增长而调整大小。 List<T>.Capacity是允许您在需要调整大小之前获取/设置列表大小的属性。

See MSDN List.Capacity

  

容量是在需要调整大小之前List可以存储的元素数,而Count是List中实际存在的元素数。   容量始终大于或等于Count。如果在添加元素时Count超过Capacity,则在复制旧元素和添加新元素之前自动重新分配内部数组会增加容量。

因此,在您的示例中,容量&gt; <强>计数