c# - 使用 Item[X, Y] 时,Intellisense 无法识别我的二维列表
问题描述
我正在尝试将一些旧的 Delphi 代码(dijkstra 路径查找算法)转换为 C#。我在 Delphi 中使用了数组,但由于 C# 不允许动态调整大小,所以我采用了二维列表。
但是我希望在 Map[X, Y] 上找到我的 PathCoord 类,Visual Studio 一直告诉我“方法 'this' 没有重载需要 2 个参数”。要么智能感知要么给我另一个列表的下拉列表,要么它只是给我一个基本对象未定义对象的四个选项。
我很可能忽略了一些完全明显的东西,但我已经看了好几个小时,并开始认为我在盯着自己看。
任何帮助,将不胜感激。
public class PathCoord
{
List<Point> PathTo;
Color TheColor;
double Cost;
public PathCoord()
{
PathTo = new List<Point>();
TheColor = Color.FromArgb(0, 0, 0, 0);
Cost = 0f;
}
}
public class PathEngine
{
public List<List<PathCoord>> Map = new List<List<PathCoord>>();
public void AddPathToPoint(Point newPoint, List<Point> PathTo, double Cost)
{
Map[newPointX, newPoint.Y].
}
}
这是最短的代码示例。我认为最好不要包含太多代码,但如果需要,我会很乐意包含整个代码
解决方案
您的Map
字段不是二维数组。看起来像这样:
PathCoord[,] Map = new PathCoord[2, 5];
不仅如此,而且你Map
根本不是一个数组,而是一个动态List
集合。C# 中没有“多维列表”之类的东西(至少在多维数组存在的意义上不像上面那样)。
相反,您Map
是一个嵌套列表或列表列表。因此,您需要使用使用多个索引器的“锯齿状数组”方法 - 每个级别的列表一个:
Map[newPointX][newPointY] = ...;
推荐阅读
- python - 返回多处理 shared_memory 数组时内核重新启动
- python - 类中所有方法的抽象方法装饰器
- java - 检测设备是否支持自动对焦
- html - 有一个包含 mapbox 地图宽度和高度属性根据设备屏幕大小调整大小
- com - 64 位托管进程:进程外 32 位 COM 服务器非默认接口不可用
- laravel - 无法调用组件方法。在组件上找不到公共方法 [previousPageUrl]
- ios - 在 SwiftUI 中的两个第一响应者文本字段之间切换时如何不关闭键盘
- oracle - Oracle 避免浪费性的加入回来?
- graphql - Hasura 在完成教程时崩溃了
- java - 尝试在 Jenkins 中保存工件配置时出错