Heres는 내 구조체 ...사용하여 구조체
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 필드가있는 객체입니다. 나는 그들이 사실이 될 때까지 그들에게 물건을하고 bool을 바꿔주는 while 회 돌이를가집니다 .. 그들은 진실로 바뀌지 않으므로 무한 루프에 갇히게됩니다. 이상한 것은 무엇이든 나가지 못한다는 것입니다. 범위 오류 또는 그와 같은 것 그리고 bool이 바뀌는 비트를 디버깅 할 때 잘 동작하는 것처럼 보이지만 디버그에서 사전을 볼 때 모든 bool은 여전히 false이다.
(참고 : 나는 Tuple을 다음과 같이 사용했다. 키는하지만 난
난 그냥 당신이 확인하고 싶은) 증식 쉽게 추가 할 수 있도록이 구조체 만든 ...
_myDictionary = new Dictionary<Coord, RogueRoom>();
_myDictionary[new Coord(4,5)] = new RogueRoom();
_myDictionary[new Coord(4,5)].Connected = true
그 두 번 내가 같은 값 개체에 액세스 오전 사전에 액세스 할 수 있습니까?
편집 : 여기에 사전에 값 구조체입니다 그것은 Thing
이 무엇인지에 따라 달라집니다
internal struct RogueRoom
{
public Room RoomField;
public bool Connected;
public Rectangle Realpos;
public Color[] RogueRoomColors;
public Coord Gridpos;
}
정확히 일치하지 않는 짧은 예를 보여주세요. –
구조가 나에게 잘 보입니다. 오류는 다른 곳에 있어야합니까? == 그들을 사용하여 어디서나 비교할 수 있습니까? 연산자 ==() –
아니요, 그냥 키로 사용한 다음 값 객체의 bool에 ==를 사용했습니다. –