索引器过载导致:"扫雷.Tile是一种类型,但被用作变量"错误

本文关键字:quot 类型 一种 变量 错误 索引 Tile 扫雷 | 更新日期: 2023-09-27 18:10:41

我正在用c#做一个扫雷项目,我想把新的Tile存储在Tile类的字典里,这样当Tile被启动时,它就被存储起来,可以通过Tile[cods]访问,但是我一直得到上面的错误。这是我为Tile类使用的代码(请不要评论我的约定,我是c#的新手,我是Java/Python程序员:p)

class Tile
{
    private static Dictionary <Coords, Tile> tiles = new Dictionary <Coords, Tile> ();
    public int numMinesAdjacents { get; set; }
    public readonly bool isMine;
    public readonly Coords position;
    private Tile [] aAdjacents = new Tile [8];
    public Tile(int x, int y, bool isMine = false)
    {
        this.isMine = isMine;
        position = new Coords(x, y);
        Tile[position] = this;
    }
    public void init()
    {
        calculateAdjacents();
        calculateNumMinesAdjacent();
    }
    private void calculateAdjacents()
    {
        int i = 0;
        for (int y = -1; y < 1; y++)
        {
            if ((position.y - y) < 0 || (position.y + y) > Math.Sqrt(Program.MAX_TILES)) continue;
            for (int x = -1; x < 1; x++)
            {
                if ((position.x - x) < 0 || (position.x + x) > Math.Sqrt(Program.MAX_TILES)) continue;
                aAdjacents [i] = Tile[position + new Coords(x, y)];
                i++;
            }
        }
    }
    private void calculateNumMinesAdjacent()
    {
        int n = 0;
        foreach (Tile pTile in aAdjacents)
        {
            if (pTile.isMine) n++;
        }
        numMinesAdjacents = n;
    }
    /*private static void add(Tile pTile)
    {
        tiles.Add(pTile.position, pTile);
    }*/
    public /*static - if I use static nothing is different*/ Tile this [Coords coords]
    {
        get { return tiles [coords]; }
    }
}

如果我调用

瓷砖(0,0);瓷砖(0,1);

然后

平铺[new coordinates (0,0)]

我得到一个错误,我也得到一个错误的地方在类中使用Tile[](构造函数和calculateAdjacents)这里出了什么问题?

谢谢,杰米

编辑:对不起,我的意思是Tile[位置],我把它改回来了,打错了。问题是我重载了这个,这应该意味着Tile[cods]是合法的,即使从另一个类

索引器过载导致:"扫雷.Tile是一种类型,但被用作变量"错误

调用

你不清楚这是什么意思:

Tile[this];

目前还不是一个有效的表达式。

c#不支持静态索引器。对于实例索引器,可以使用:
Tile tile = this[someCoordinate];

…尽管对于实例索引器来说,像这样使用静态成员是很奇怪的。如果有一个方法:

会更简洁
public static Tile GetTile(Coords coords)
{
    return tiles[coords];
}

那么你就在别处调用Tile.GetTile(...)

作为旁注,您应该开始遵循。net命名约定,以使您的代码更容易理解。另外,我强烈建议您避免使用公共字段,即使它们是只读的。

相关文章: