我正在c#中制作扫雷项目以获得乐趣,我想将新Tiles存储在Tile类内的字典中,以便在启动Tile时它会被存储并可以通过Tile [coords]访问但是我保留得到上述错误。这是我用于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);
然后
Tile [new Coords(0,0)]
我收到错误,我在类中使用Tile []的地方也遇到错误(constructor和calculateAdjacents)这里出了什么问题?
谢谢, 杰米
编辑:对不起我的意思是Tile [位置]我正在改变它并输入错误。问题是我重载了这应该意味着即使从另一个类调用Tile [coords]也是合法的答案 0 :(得分:2)
目前尚不清楚您的期望是什么意思:
Tile[this];
目前这不是一个有效的表达方式。
C#不支持静态索引器。对于实例索引器,您可以使用:
Tile tile = this[someCoordinate];
...虽然实例索引器使用像这样的静态成员很奇怪。有一个方法会更简洁:
public static Tile GetTile(Coords coords)
{
return tiles[coords];
}
然后你只需在其他地方拨打Tile.GetTile(...)
。
作为旁注,您应该开始遵循.NET命名约定,以使代码更易于理解。此外,我强烈建议您避免使用公共字段,即使它们是只读的。