【问题标题】:How to properly replace objects in an array - C#如何正确替换数组中的对象 - C#
【发布时间】:2011-10-12 22:56:48
【问题描述】:

我正在尝试从数组中删除一个对象,并用一个相同类型的对象填充插槽,但所有属性都为 0。但是当我这样做时,由于某种原因,当我重新计算数组值时,这些值并不清楚。

以下是我如何清除一个对象并在其位置插入一个空白对象。

    public void clearOutBox(int arraySlot)
    {
        itemsInbuildArray.Remove(itemsArray[arraySlot]);
        itemsInbuildArray.Insert(arraySlot, blank);
        itemInBuildPictureArray[arraySlot].ImageLocation = null;
        statCalculation();
    }

    //one of the lines from the statCalculation method. 
    statsHealth.Text = (Convert.ToString(itemsInbuildArray.Sum(hp => hp.Health)));

        public partial class Form1 : Form
{
    List<Item> itemsArray = new List<Item>();
    List<PictureBox> itemInBuildPictureArray = new List<PictureBox>();
    List<ToolTip> itemInBuildTooltipArray = new List<ToolTip>();
    List<Item> itemsInbuildArray = new List<Item>();
            Item blank = new Item(); // this is one of several objects created here
}

我用其中的 6 个空白项初始化数组,用值替换一个空白项没有问题,但删除它是导致我出现问题的原因。

请原谅我这样做的方式很可能是愚蠢的,我刚刚开始 C# 并将这个项目作为学习经验。任何意见表示赞赏!

【问题讨论】:

  • 为什么不只是itemsInbuildArray[arraySlot] = blank
  • 这个“空白”对象来自哪里(代码中的第 4 行)以及如何创建它?
  • 您需要提供更多信息 - 您似乎有 3 个类似数组的对象 - 其中至少一个 itemsInbuildArray 实际上是 ArrayList 而不是 Array。

标签: c# arrays object replace


【解决方案1】:

为什么不直接索引它:

int index = 5;
array[index] = new Foobar(); // whatever your class is

这将改变数组中第 6 个插槽中引用的任何内容。

除非你知道你永远不会修改它们,否则我会避免使用称为“空白”的单个引用并将其放入多个数组槽中。如果它们是引用类型,那么修改其中之一将修改它们。

【讨论】:

  • blank 只是一个对象的名称。它们最初都必须是空白的,因为这些值是在输入每个项目时计算的,如果里面没有东西就会崩溃
  • 这解决了我的问题!我想我只是把它复杂化了谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2015-10-19
  • 1970-01-01
相关资源
最近更新 更多