如果语句与枚举相比始终为真

汤拉

我有一个问题。我正在制作一个实用程序来生成过程生成的地图。我有一个房间游泳池,每个房间都放在一个房间的桌子上。我有一种方法可以将在桌子上走动的所有房间连接在一起,并连接相邻的房间。

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

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条件可以很好地工作,但neighbourhood[2,1].TypeOfRoom不相等typeOfRoom,这意味着该条件正在另一个线程中进行修改。

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

如果或何时确实了解发生这种情况的原因和时间,则需要实现某种同步机制,或者(最好)指导不可变的实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果语句始终为真

来自分类Dev

如果返回始终为真

来自分类Dev

即使输入正确,if 语句也始终为真?

来自分类Dev

PHP对数组的“如果为真”测试始终返回“真”?

来自分类Dev

如果语句为真,但未执行

来自分类Dev

为什么我的JavaScript if语句始终为真?

来自分类Dev

如果语句被跳过,即使该语句为真

来自分类Dev

可为空的十进制如果始终为真

来自分类Dev

如果条件始终为真,则执行Bash脚本

来自分类Dev

尽管为真,但如果语句评估为假

来自分类Dev

Pyspark:比较值,如果为真则执行语句

来自分类Dev

如果语句始终为True Jinja2模板

来自分类Dev

如果始终执行语句

来自分类Dev

如果(a = 1)为真

来自分类Dev

解析查询始终为真

来自分类Dev

Java 数组 - 始终为真

来自分类Dev

RouterLinkActive "isActive" 始终为真

来自分类Dev

空条件运算符在 if 语句中始终为真 when 应该为假

来自分类Dev

编译器:如果条件始终为真/假,该怎么办

来自分类Dev

如果条件始终为真,为什么要使用此PHP?

来自分类Dev

消除抖动:如果内部变量始终为真,该如何工作

来自分类Dev

如果条件始终为真,为什么要使用此PHP?

来自分类Dev

循环直到语句为真

来自分类Dev

C#计时器(TimeSpan)始终在后台打勾(如果在不为真时应用语句)

来自分类Dev

如果语句始终返回true?

来自分类Dev

如果std :: is_trivial_v <T>为true,则std :: is_standard_layout_v <T>始终为真吗?

来自分类Dev

如果if / else语句中有2个布尔变量为真,该怎么办

来自分类Dev

如何解决:如果值为真,则计数结果与其他不同的 if 语句结果?

来自分类Dev

熊猫过滤:如果任一语句为真,则选择多列

Related 相关文章

热门标签

归档