这是我的结构...
internal struct Coord : IEquatable<Coord>
{
public int X { get; private set; }
public int Y { get; private set; }
public Coord(int x,int y) : this(){ X = x;
Y = y;}
//Overloaded operator functuions below
//So I can easily multiply Coords by other Coords and ints and also add Coords together
public static Coord operator *(Coord left, int right)
{
return new Coord(left.X * right, left.Y * right);
}
public static Coord operator *(Coord left, Coord right)
{
return new Coord(left.X * right.X, left.Y * right.Y);
}
public static Coord operator +(Coord left, Coord right)
{
return new Coord(left.X + right.X, left.Y + right.Y);
}
public static Coord operator -(Coord left, Coord right)
{
return new Coord(left.X - right.X, left.Y - right.Y);
}
public override int GetHashCode()
{
int hash = 17;
hash = hash * 31 + X;
hash = hash * 31 + Y;
return hash;
}
public override bool Equals(object other)
{
return other is Coord ? Equals((Coord)other) : false;
}
public bool Equals(Coord other)
{
return X == other.X &&
Y == other.Y;
}
}
我将这些用作字典的键,但我认为它们不能正确地相互等同。字典中的值是具有 bool 字段的对象。我有一个while循环对它们做一些事情并将bool更改为true,直到它们全部为true..它陷入无限循环,因为它们永远不会变为true..奇怪的是我没有超出范围错误或类似的东西,当我调试更改布尔值的位时,它似乎工作正常,但是当我在调试中查看字典时,所有布尔值仍然是错误的
(注意:我使用元组作为键,但我制作了这个结构,所以我可以轻松地相乘和相加)
我只是想和你确认一下...
_myDictionary = new Dictionary<Coord, RogueRoom>();
_myDictionary[new Coord(4,5)] = new RogueRoom();
_myDictionary[new Coord(4,5)].Connected = true
那两次我访问字典时我访问的是同一个值对象?
编辑:这是字典中的值结构(我替换了上面的“东西”)
internal struct RogueRoom
{
public Room RoomField;
public bool Connected;
public Rectangle Realpos;
public Color[] RogueRoomColors;
public Coord Gridpos;
}