sou*_*ola 5 c# enums if-statement
我遇到了问题.我正在制作一个实用程序来执行程序生成的地图.我有一个房间游泳池,每个房间都摆放在一张房间的桌子上.我有一种方法将所有房间连接在一起,走在桌子上并连接相邻的房间.
我有一个enum包含房间类型:
public enum RoomType
{
Default = 0,
Building,
Boss,
Item,
Standard,
Start,
}
Run Code Online (Sandbox Code Playgroud)
在连接方法中,我检查邻居,看看它是什么样的房间:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我检查房间的类型是否是Start,它始终true是连接添加.

我不知道为什么会这样.
我在哪里设置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)
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在您将看到条件if工作得很好,但neighbourhood[2,1].TypeOfRoom不等于typeOfRoom,这意味着它正在另一个线程中被修改。
如果您不知道其他线程如何或在何处修改您的对象,那么您将面临更大的问题需要解决,因为您似乎不了解您正在使用的代码或框架。
如果或当您确实了解发生这种情况的原因和时间时,您将需要实现一些同步机制或转向(首选)不可变的实现。
| 归档时间: |
|
| 查看次数: |
267 次 |
| 最近记录: |