索引器过载导致:"扫雷.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[this];
目前还不是一个有效的表达式。
c#不支持静态索引器。对于实例索引器,可以使用:Tile tile = this[someCoordinate];
…尽管对于实例索引器来说,像这样使用静态成员是很奇怪的。如果有一个方法:
会更简洁public static Tile GetTile(Coords coords)
{
return tiles[coords];
}
那么你就在别处调用Tile.GetTile(...)
。
作为旁注,您应该开始遵循。net命名约定,以使您的代码更容易理解。另外,我强烈建议您避免使用公共字段,即使它们是只读的。