近期编写的代码中有牵涉到数组操作的部分,结合MSDN和相关教程中的规定后有些疑问。
1.
private string[] _picname;
_picname = Directory.GetFiles(_folderName);这里我并没有实例化_picname这个数组,但一次性将文件夹下的名字全赋给数组后没有发生报错。这样初始化数组没有问题吗?还是我没有考虑到其他方面?2.
Thread[] _ThreadMatrix = new Thread[_CPUNum];这里,我建立了一个线程数组,其数组大小我使用了int型的变量_CPUNum。
但在相关教程中规定,数组初始化指定大小时,必须为const常量,不能为变量。但实际程序中并没有报错,是教程版本太低的原因还是确实有问题,我没有发现?以上两个问题希望各位高人多多赐教!多谢!

解决方案 »

  1.   

    (1)_picname = Directory.GetFiles(_folderName); 这个是在函数中在托管堆上分配的内存。然后只是把内存的地址赋给了变量。
    (2)int _CPUNum;clr会给他分配一个默认的值,一般为0.
      

  2.   


    对于1,不明白您想说什么意思,Directory.GetFiles(_folderName)返回的是某个文件夹下所有的文件名,用数组去接收。数组和该方法的返回值都是string型的对2,程序在Thread[] _ThreadMatrix = new Thread[_CPUNum];执行之前改变过_CPUName变量的值,所以不存在CLR对其有默认值的问题,它还是个变量。
      

  3.   

    数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。
    这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。int[] numbers; // declare numbers as an int array of any sizenumbers = new int[10];  // numbers is a 10-element arraynumbers = new int[20];  // now it's a 20-element array
      

  4.   

    private string[] _picname;
    _picname = Directory.GetFiles(_folderName);Directory.GetFiles(string path)这个函数内部使用了new,所以,并不需要初始化。
    比如(仅是举例)
    Directory.GetFiles(string path)

      //....
       string[] destinationArray = new string[length];
      //....
       return destinationArray;}
      

  5.   

    Directory.GetFiles返回值就是个数组,就是个实例化过的string数组...GetFiles...你不懂英文吗?就算不懂英文也该先去看看MSDN...还有实例化未必要自己做,引用类型究竟是怎么回事也要先弄清楚...好好看看书吧...还有这个...“相关教程中规定,数组初始化指定大小时,必须为const常量,不能为变量”,你看的什么“相关教程”?谁家的规定?MSDN从来没这么说过...