C# 搜索功能超出范围? 公共静态int PlanetToIndex(字符串planetToSearch,列表pl) { 对于(int i=0;i

C# 搜索功能超出范围? 公共静态int PlanetToIndex(字符串planetToSearch,列表pl) { 对于(int i=0;i,c#,list,search,range,C#,List,Search,Range,它的C#简单的搜索功能,似乎容量=16,但超出范围为14 14是正确的值,为什么MessageBox显示16 还有,这里列出了我传递给函数的内容(Planet是抽象类) class星系 { public List galaxy=新列表(); 行星Ceres=新行星.Ceres(); 行星冥王星=新行星。冥王星(); 欧罗巴行星=新行星。欧罗巴(); 金星=新行星。金星(); 行星Sedna=新行星.Sedna(); 木星=新行星。木星(); 行星空洞=新行星。空洞(); 行星Eris=新行星.E

它的C#简单的搜索功能,似乎容量=16,但超出范围为14

14是正确的值,为什么MessageBox显示16

还有,这里列出了我传递给函数的内容(Planet是抽象类)

class星系
{
public List galaxy=新列表();
行星Ceres=新行星.Ceres();
行星冥王星=新行星。冥王星();
欧罗巴行星=新行星。欧罗巴();
金星=新行星。金星();
行星Sedna=新行星.Sedna();
木星=新行星。木星();
行星空洞=新行星。空洞();
行星Eris=新行星.Eris();
火星=新行星。火星();
天王星=新行星。天王星();
行星海王星=新行星。海王星();
土星=新行星。土星();
行星地球=新行星。地球();
水星=新行星。水星();
公共银河()
{
银河系(Ceres);
银河系(冥王星);
加上(欧罗巴);
加上(金星);
galaxy.Add(Sedna);
加上(木星);
galaxy.Add(Void);
galaxy.Add(Eris);
galaxy.Add(火星);
银河系(天王星);
银河系(海王星);
加上(土星);
加上(地球);
加上(水星);
}
}

我建议使用count

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);
    }
}
for(int i=0;i
我想您应该使用
pl.Count
,而不是
pl.Capacity


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

容量与计数不同。试试这个:

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

在for循环中,您需要使用

return pl.FindIndex(planet => planet.Equals(planetToSearch));
for(int i=0;i
容量是指其可存储的元素数量。试试这个,看看有什么区别:

for (int i = 0; i < pl.Count; i++)
List intlist=new List();
intlist.容量=32;
Console.WriteLine(intlist.Count);
Console.WriteLine(intlist.Capacity);
Console.In.Read();

输出为0和32。因为数组中实际上没有元素,而是有32个元素的空间。

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

:

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


因此,在您的示例中,容量计数

哇。。。是的,这解释了一切。。。
return pl.FindIndex(planet => planet.Equals(planetToSearch));
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();