当前位置:  开发笔记 > 编程语言 > 正文

有没有办法像对待ArrayList一样处理ac#静态数组?

如何解决《有没有办法像对待ArrayList一样处理ac#静态数组?》经验,为你挑选了1个好方法。

我有使用数组的代码,不幸的是,我不能改变他们的类型.如果可以,我会使用ArrayLists或类似的东西做我需要做的事情,但我不能.基本上,我正在寻找从静态数组中添加和删除对象的最佳方法.为了在运行中向项目添加项目,我必须创建一个比旧数组大一个元素的新数组,将旧数组中的项目复制到新数组中,然后添加新项目.像这样的东西......

public partial class dataStruct 
{
    private myObject[] myStaticArray;
};

private void AddItemToMyArray()
{
    int oldLength = dataStruct.myStaticArray.Length;
    myObject[] newMyObjectArray = new myObject[oldLength + 1];
    for (int i = 0; i < oldLength; i++)
       newMyObjectArray [i] = dataStruct.myStaticArray[i];

    dataStruct.myStaticArray[oldLength] = new myObject();
    dataStruct.myStaticArray = newMyObjectArray;
}

为了删除一个项目,我做同样的事情,只有我创建一个较小的一个项目的新数组.这感觉真的很低效.任何人都可以建议一个更好的方法,如果有的话?或任何其他想法?

在此先感谢您的帮助!



1> Jon Skeet..:

否 - 数组始终是固定大小.您无法添加/删除条目.

这正是有效的限制ArrayListList解决方法.它们在内部维护一个数组,但通常大于列表的逻辑大小.当你向List它添加一个项目时,它将填充现有的数组(如果可以),或者如果没有足够的空间,它将创建一个新的,更大的数组并将内容复制到其中.此更改对调用者是透明的 - 您仍然可以使用原始引用,因为它是对列表的引用,而不是对基础数组的引用.

使代码更简单(但可能效率不高)的一件事是使用Array.Resize.它不会调整现有数组的大小,但会返回一个新数组,其中包含旧内容的浅表副本,其大小与您请求的大小相同.复制可能比手动循环快一点,但效率低下的主要原因仍然存在.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有