如果对象中属性的值等于某个值,我想执行一些操作。
我的目标:
//abstract class Tile.cs
namespace DungeonGame.Tiles
{
public abstract class Tile
{
public abstract string Type { get; set; }
}
}
//Item.cs that iherits from Tile.cs
namespace DungeonGame
{
public class Item : Tile
{
public override string Type { get; set; }
public string Name { get; set; }
public Item(string name)
{
this.Type = "item";
this.Name = name;
}
}
}
我在public Object[,] BoardTiles { get; private set; }
中有几个对象,我必须在同一个地方存储不同类型的瓦片,所以我必须使用Object类型数组。我想做的是用不同类型的对象替换数组索引,这取决于属性的值(在这种情况下,我根据对象类型而不是属性的值来设置值(:
public void movefillRight(int playerPositionRowIndex, int playerPositionColumnIndex)
{
for (int r = 0; r < Rows; r++)
{
for (int c = 0; c < Cols; c++)
{
if (BoardTiles[playerPositionRowIndex, playerPositionColumnIndex ].GetType().ToString() == ("DungeonGame.Item"))
{
/* placePlayerOnTheBoard(playerPositionRowIndex, playerPositionColumnIndex, PlayerTile);
*/ BoardTiles[playerPositionRowIndex, playerPositionColumnIndex] = Item1;
BoardTiles[playerPositionRowIndex, playerPositionColumnIndex - 1] = Floor;
}
else if (BoardTiles[playerPositionRowIndex, playerPositionColumnIndex-1].GetType().ToString() == ("DungeonGame.Item"))
{
BoardTiles[playerPositionRowIndex, playerPositionColumnIndex-1] = Item1;
placePlayerOnTheBoard(playerPositionRowIndex, playerPositionColumnIndex, PlayerTile);
}
else
{
placePlayerOnTheBoard(playerPositionRowIndex, playerPositionColumnIndex, PlayerTile);
BoardTiles[playerPositionRowIndex, playerPositionColumnIndex - 1] = Floor;
}
}
}
Console.WriteLine(BoardTiles[playerPositionRowIndex, playerPositionColumnIndex].GetType().ToString());//log
}
该函数的功能是当玩家走过时,将同一个对象留在同一索引上,所以问题是,当我有一个项目时,代码是可以的,例如只有剑,但当有更多项目时,我可以用相同的对象替换索引,但不能用具有不同属性的对象替换,当玩家走过一把好剑和一把坏剑(相同的物体,但不同的属性(时,他只留下一把剑。。。我知道如何解决这个问题,但我需要引用位于对象数组特定索引处的属性值。
检查数组中的项是否为特定类型后,可以对其进行强制转换。
if (BoardTiles[playerPositionRowIndex, playerPositionColumnIndex ].GetType().ToString() == ("DungeonGame.Item"))
{
var item = (DungeonGame.Item)BoardTiles[playerPositionRowIndex, playerPositionColumnIndex];
Console.Writeline(item.Name);
}