gpt4 book ai didi

c# - 使用结构作为字典的键和奇怪的事情正在发生

转载 作者:行者123 更新时间:2023-11-30 22:20:31 29 4
gpt4 key购买 nike

这是我的结构...

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 ..奇怪的是我没有得到任何超出范围的东西错误或类似的东西,当我调试 bool 更改的位时它似乎工作正常但是当我在调试中查看字典时所有 bool 仍然是错误的

(注意:我使用元组作为键,但我制作了这个结构,所以我可以轻松地乘法和加法)

我只是想和你确认一下......

  _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;
}

最佳答案

这取决于Thing 是什么。如果 Thing 是一个 struct:否;该值在获取时被复制 - 尽管编译器通常会阻止您为即将被丢弃的 struct 分配属性。如果它是一个,那么它应该是同一个对象实例;您的等号/哈希码看起来很合理。

关于c# - 使用结构作为字典的键和奇怪的事情正在发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940471/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com