【问题标题】:How to remove an object from an array of objects in C# [duplicate]如何从C#中的对象数组中删除对象[重复]
【发布时间】:2015-11-29 01:18:01
【问题描述】:

我不知道我正在尝试做的事情是否可以在 C# 中执行,并且我无法在网上找到答案。我有 4 个敌方物体。其中一人死亡。我希望将那个敌人从阵列中移除。如果敌人在阵列中间,我希望下一个敌人占据它的位置,这样阵列中间就没有空位。这是代码(我写“//remove here”的地方是我想要删除对象的地方):

    public static int numberOfEnemies = random.Next(1, 4);
    // create 1-4 enemies
    public static Enemy[] enemyNumber = new Enemy[numberOfEnemies]; 

   // initialize enemies
   int h = 0;
         do
         {
               enemyNumber[h] = new Enemy(playerLevel);
               h++;
               System.Threading.Thread.Sleep(25);
         } while (h != numberOfEnemies);

    // code where the fight happens i did not include
    // enemy dies
    if (enemyNumber[0].Ehealth <= 0){
                {
                    Console.WriteLine("Enemy {0} is dead!", eName);
                    // remove here
                }
    }

【问题讨论】:

  • 你绝对需要使用数组吗?如果没有,为什么不使用敌人列表呢? :)
  • 使用列表代替数组。它有一个方法Remove(YourClass object),可以简单地从列表中删除您的对象。如果您知道对象的索引等,您也可以使用RemoveAt(int index)。 (here's some example

标签: c# arrays object destroy


【解决方案1】:

您最好使用某人提到的列表。这将允许您删除对象而不必担心空白空间(它将被下一个对象填充)如果没有,每次从数组中删除某些东西时您都需要这样的东西(假设 Enemy 不是结构)

enemyNumber = enemyNumber.Where(enem => enem != null).ToArray();

还要重命名enemyNumber,因为它是一组敌人,而不是一个数字:)

【讨论】:

  • 这不是一个完整的答案。在具有自定义对象的容器上使用此方法还需要定义其他内容才能使谓词起作用。
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 2012-11-25
  • 2018-08-28
  • 1970-01-01
  • 2021-07-01
  • 2022-12-05
  • 1970-01-01
相关资源
最近更新 更多