4

我不确定这在 c# 中是否可行,但我在

 public partial class Form1 : Form
 {...
   ...
    #region used variables
    public ulong[] logP = {0,0,0,0,0,0,0,0}
  ....
  ..

然后在程序的稍后部分,我希望有一个选项来调整程序中的大小,然后主例程将启动它并进行一些计算

因为我喜欢用各种数字和数组大小进行测试,所以我希望有一个选项来调整数组的大小,对于每个测试(但这个数组没有绑定到单个过程,它是一个需要调整大小的全局变量。

由于各个部分的整个程序都在使用这个数组,(在各种功能下)我应该如何放置这部分

    ulong [] sumP = new ulong[numericupdown.valeu];

这样它会改变这个全局变量大小吗?

4

4 回答 4

17

你不能调整数组的大小;您必须声明一个所需大小的新数组并将原始数组的内容复制到新数组中。

更新:我不喜欢Array.Resize- 它不会调整数组的大小(正如方法名称所暗示的那样),它会创建一个新数组并替换引用:

    static void Main(string[] args)
    {
        int[] a1 = new int[] { 1, 2, 3 };
        int[] a2 = a1;

        Console.WriteLine("A1 Length: {0}", a1.Length); // will be 3
        Console.WriteLine("A2 Length: {0}", a2.Length); // will be 3
        Array.Resize(ref a1, 10);
        Console.WriteLine("A1 Length: {0}", a1.Length); // will be 10
        Console.WriteLine("A2 Length: {0}", a2.Length); // will be 3 - not good

        Console.ReadLine();
    }
于 2013-10-11T22:31:53.753 回答
0

正如 icemanind 建议的那样 - 考虑使用 List 数组,但是作为更好的做法,请确保将数组容量初始化为合理的数量,即:

List<string> myList = new List<string>(10); // initial capacity is 10

优点是性能和空间分配是预定义的,这并不意味着每次向其中添加项目时它都需要重新创建集合,因为它会使用现有的分配量,直到达到它然后它会在内部增加它。

于 2013-10-11T22:31:46.903 回答
0
    class Program
    {
       static void Main(string[] args)
       {
        var myArr = new int[5] { 1, 2, 3, 4, 5 };
        Array.Resize(ref myArr, 10);
        for (int i = 0; i < myArr.Length; i++)
        {
            Console.WriteLine("   [{0}] : {1}", i, myArr[i]);
        }
        Console.ReadLine();
    }
}
于 2014-04-14T21:52:01.497 回答
-1

用于Array.Resize()调整数组大小,

http://msdn.microsoft.com/en-us/library/bb348051.aspx

例如:

        var intArray = new int[5] { 1, 2, 3, 4, 5 };

        Array.Resize(ref intArray, 10);
于 2013-10-11T22:41:15.420 回答