首页 > 解决方案 > 使用 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].
    }
}

这是最短的代码示例。我认为最好不要包含太多代码,但如果需要,我会很乐意包含整个代码

标签: c#

解决方案


您的Map字段不是二维数组。看起来像这样:

PathCoord[,] Map = new PathCoord[2, 5]; 

不仅如此,而且你Map根本不是一个数组,而是一个动态List集合。C# 中没有“多维列表”之类的东西(至少在多维数组存在的意义上不像上面那样)。

相反,您Map是一个嵌套列表或列表列表。因此,您需要使用使用多个索引器的“锯齿状数组”方法 - 每个级别的列表一个:

Map[newPointX][newPointY] = ...;

推荐阅读