これが私の構造です...
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 フィールドを持つオブジェクトです。私はそれらに何かをし、それらがすべてtrueになるまでboolをtrueに変更するwhileループを持っています..それらがtrueに変更されることはないので、無限ループに陥ります..奇妙なのは、範囲外に出ないことです.エラーまたはそのようなもので、ブール値が変更されたビットをデバッグすると正常に動作するように見えますが、デバッグで辞書を見ると、すべてのブール値がまだ偽です
(注: タプルをキーとして使用していましたが、この構造体を作成して、簡単に乗算および加算できるようにしました)
確認したいのですが...
_myDictionary = new Dictionary<Coord, RogueRoom>();
_myDictionary[new Coord(4,5)] = new RogueRoom();
_myDictionary[new Coord(4,5)].Connected = true
同じ値オブジェクトにアクセスしている辞書に 2 回アクセスしますか?
編集:辞書の値構造体は次のとおりです(上記の「もの」を置き換えました)
internal struct RogueRoom
{
public Room RoomField;
public bool Connected;
public Rectangle Realpos;
public Color[] RogueRoomColors;
public Coord Gridpos;
}