如何检查对象的 属性 值
How to check property value of object
如果对象中 属性 的值相等,我想做一些操作。
我的对象:
//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; }
中有几个对象,我必须在同一个地方存储不同类型的图块,所以我不得不使用对象类型数组。
我想要做的是用不同类型的对象替换数组索引,具体取决于 属性 的值(在这种情况下,我根据对象类型设置值而不是他的值 属性):
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
}
该函数的功能是当玩家走过时将相同的对象留在相同的索引上,所以问题是当我有一个项目时代码没问题,例如只有剑,但是当有更多项目我总是可以用相同的对象而不是对象 不同的属性替换索引,当玩家走过一把好剑和坏剑(相同的对象,但另一个属性)时,他只留下剑......我知道如何解决这个问题,但我需要参考 属性 值,它位于我的对象数组的特定索引处。
检查数组中的项目是否属于特定类型后,您可以 cast 它。
if (BoardTiles[playerPositionRowIndex, playerPositionColumnIndex ].GetType().ToString() == ("DungeonGame.Item"))
{
var item = (DungeonGame.Item)BoardTiles[playerPositionRowIndex, playerPositionColumnIndex];
Console.Writeline(item.Name);
}
如果对象中 属性 的值相等,我想做一些操作。
我的对象:
//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; }
中有几个对象,我必须在同一个地方存储不同类型的图块,所以我不得不使用对象类型数组。
我想要做的是用不同类型的对象替换数组索引,具体取决于 属性 的值(在这种情况下,我根据对象类型设置值而不是他的值 属性):
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
}
该函数的功能是当玩家走过时将相同的对象留在相同的索引上,所以问题是当我有一个项目时代码没问题,例如只有剑,但是当有更多项目我总是可以用相同的对象而不是对象 不同的属性替换索引,当玩家走过一把好剑和坏剑(相同的对象,但另一个属性)时,他只留下剑......我知道如何解决这个问题,但我需要参考 属性 值,它位于我的对象数组的特定索引处。
检查数组中的项目是否属于特定类型后,您可以 cast 它。
if (BoardTiles[playerPositionRowIndex, playerPositionColumnIndex ].GetType().ToString() == ("DungeonGame.Item"))
{
var item = (DungeonGame.Item)BoardTiles[playerPositionRowIndex, playerPositionColumnIndex];
Console.Writeline(item.Name);
}