超出搜索功能的范围
本文关键字:范围 功能 搜索 | 更新日期: 2023-09-27 18:22:44
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 是正确的值,为什么消息框显示 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);
}
}
容量与计数不同。 试试这个:
for (int i = 0; i < pl.Count; i++)
if (pl[i].Equals(planetToSearch))
return i;
或者更好的是:
return pl.FindIndex(planet => planet.Equals(planetToSearch));
我认为你想使用pl.Count
,而不是pl.Capacity
。
Capacity
是内部数据结构无需调整大小即可容纳的元素总数。而Count
是清单中实际包含的元素数目。
在你的 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 个元素的空间。
我建议使用计数
for (int i = 0; i < pl.Count(); i++)
与大小固定的数组不同,List 会随着其增长而调整大小。 List<T>.Capacity
是允许您在需要调整大小之前获取/设置列表大小的属性。
请参阅 MSDN 列表。容量:
容量是 List 在需要调整大小之前可以存储的元素数,而 Count 是列表中实际存在的元素数。 容量始终大于或等于计数。如果添加元素时 Count 超过容量,则通过在复制旧元素并添加新元素之前自动重新分配内部数组来增加容量。
因此,在您的示例中,容量>计数