gpt4 book ai didi

c# - 与枚举相比,如果语句始终为真

转载 作者:太空狗 更新时间:2023-10-29 22:57:42 25 4
gpt4 key购买 nike

我遇到了问题。我正在制作一个实用程序来制作程序生成的 map 。我有一个房间池,每个房间都布置在一张房间表中。我有一种方法可以将所有房间连接在一起,这些房间在 table 上行走并连接相邻的房间。

我有一个包含房间类型的枚举:

public enum RoomType
{
Default = 0,
Building,
Boss,
Item,
Standard,
Start,
}

在连接方法中,我检查附近的房间,看看它是什么样的房间:

if (neighbourhood[2, 1] != null)
{
if (firstLevel.isOn)
{
if (neighbourhood[2,1].TypeOfRoom == RoomType.Start)
{
roomGrid[x, y].AddConnection(neighbourhood[2, 1], Location.RIGHT)
}
}
else if (neighbourhood[2,1].TypeOfRoom != RoomType.Boss)
roomGrid[x, y].AddConnection(neighbourhood[2, 1], Location.RIGHT);
}

但是当我检查房间类型是否为 Start 时,它始终为 true 并且添加了连接。

img img2

我不知道为什么会这样。

我在哪里设置 TypeOfRoom : img3

最佳答案

问题很可能是由于竞争条件引起的。您可以轻松检查是否属于这种情况,如下所示:

if (neighbourhood[2, 1] != null)
{
if (firstLevel.isOn)
{
var typeOfRoom = neighbourhood[2,1].TypeOfRoom; //store type in a local variable

if (typeOfRoom == RoomType.Start) //check against local copy
{
roomGrid[x, y].AddConnection(neighbourhood[2, 1], Location.RIGHT)
}
}
...
}

现在您将看到 if 条件工作得很好,但是 neighborhood[2,1].TypeOfRoom 将不等于 typeOfRoom 这意味着它正在另一个线程中修改。

如果您不知道您的对象如何或在何处被其他线程修改,那么您有更大的问题需要解决,因为您似乎不理解您正在使用的代码或框架。

如果或当您确实了解发生这种情况的原因和时间,您将需要实现某种同步机制或(最好)转向不可变实现。

关于c# - 与枚举相比,如果语句始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36478753/

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