我有一个财产,IList <IMyPlayer> Players {}
,每次召唤时都会与游戏服务器同步。我需要知道是否会在for循环中限制计数时更新每个增量。之所以我担心玩家可能会在这个循环中离开游戏。财产在每次被调用时更新其元素是否安全?
编辑这是一个单线程应用程序。
public static IList <IMyPlayer> Players
{
get
{
playersField.Clear(); //GetPlayers() just adds without overwriting so list must be cleared every time.
if (Debugging == false)
{
MyAPIGateway.Multiplayer.Players.GetPlayers (playersField); //everytime the project needs to see all players, this will update. Little heavier on performance but its polymorphic.
}
return playersField.AsReadOnly();
}
}
for (int i = 0; i < AttendanceManager.Players.Count; i++)
{
if (AttendanceManager.Players[i].SteamUserId == MyAPIGateway.Multiplayer.MyId)
{
//do stuff
}
}
如果你正在使用多线程,'''''''''''''''''锁''会阻止那个 – NtFreX
嗨,这是一个单线程应用程序。 –
@ Dr.Fre和Samuel:在最后一个循环中,即使Players.Count被缓存,那么这一行:'AttendanceManager.Players [i] .SteamUserId'将在每个循环迭代中调用getter,它将调用清除,GetPlayers和AsReadOnly每次迭代。这是一个非常糟糕的主意。通常。 – quetzalcoatl