C#自动更新列表已发布.clear并重新填充列表

时间:2016-01-20 15:39:02

标签: c# list

在我的程序中,我填充了一个列表,但是当我再次重新运行循环时,我会清除列表以重新重新填充它,因为列表中的某些项可能会更新。但是,有什么方法我可以做到这一点,它只是自动更新列表中的项目,所以我不能。清除并重新添加项目?

         _players.Clear();
            _weapons.Clear();
            _entities.Clear();

            var localPlayerPtr = Smurf.Memory.Read<IntPtr>(Smurf.ClientBase + Offsets.Misc.LocalPlayer);


            LocalPlayer = new LocalPlayer(localPlayerPtr);
            LocalPlayerWeapon = LocalPlayer.GetCurrentWeapon(localPlayerPtr);

for (var i = 0; i < _capacity; i++)
            {
                var entity = new BaseEntity(GetEntityPtr(i));

                if (!entity.IsValid)
                    continue;

                if (entity.IsPlayer())
                    _players.Add(new Player(GetEntityPtr(i)));
                else if (entity.IsWeapon())
                    _weapons.Add(new LocalPlayerWeapon(GetEntityPtr(i)));
                else
                    _entities.Add(new BaseEntity(GetEntityPtr(i)));
            }
            _lastUpdate = timeStamp;

1 个答案:

答案 0 :(得分:0)

列表的总重新填充应该是一种足够快的方法来处理这个问题。如果你真的需要走另一条路,那么你的另一种选择是当你运行循环时:

  1. 检查新元素是否存在,如果存在,请在列表中更新(_players[index] = newPlayer;或类似内容)。按ID或其他标识对象的属性进行检查。
  2. 如果不存在,请将其作为新项目添加到列表中。
  3. 将您的新元素存储在单独的列表中以跟踪。 (让我们称之为changesList
  4. (可选,如果您需要修剪)当您完成所有新项目后,请将changesList与其他列表进行比较(您可以使用Except(IEnumerable<T> list)方法,并且删除未使用的对象。