近期编写的代码中有牵涉到数组操作的部分,结合MSDN和相关教程中的规定后有些疑问。
1.
private string[] _picname;
_picname = Directory.GetFiles(_folderName);这里我并没有实例化_picname这个数组,但一次性将文件夹下的名字全赋给数组后没有发生报错。这样初始化数组没有问题吗?还是我没有考虑到其他方面?2.
Thread[] _ThreadMatrix = new Thread[_CPUNum];这里,我建立了一个线程数组,其数组大小我使用了int型的变量_CPUNum。
但在相关教程中规定,数组初始化指定大小时,必须为const常量,不能为变量。但实际程序中并没有报错,是教程版本太低的原因还是确实有问题,我没有发现?以上两个问题希望各位高人多多赐教!多谢!
1.
private string[] _picname;
_picname = Directory.GetFiles(_folderName);这里我并没有实例化_picname这个数组,但一次性将文件夹下的名字全赋给数组后没有发生报错。这样初始化数组没有问题吗?还是我没有考虑到其他方面?2.
Thread[] _ThreadMatrix = new Thread[_CPUNum];这里,我建立了一个线程数组,其数组大小我使用了int型的变量_CPUNum。
但在相关教程中规定,数组初始化指定大小时,必须为const常量,不能为变量。但实际程序中并没有报错,是教程版本太低的原因还是确实有问题,我没有发现?以上两个问题希望各位高人多多赐教!多谢!
(2)int _CPUNum;clr会给他分配一个默认的值,一般为0.
对于1,不明白您想说什么意思,Directory.GetFiles(_folderName)返回的是某个文件夹下所有的文件名,用数组去接收。数组和该方法的返回值都是string型的对2,程序在Thread[] _ThreadMatrix = new Thread[_CPUNum];执行之前改变过_CPUName变量的值,所以不存在CLR对其有默认值的问题,它还是个变量。
这使您可以声明一个数组并向它分配 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
_picname = Directory.GetFiles(_folderName);Directory.GetFiles(string path)这个函数内部使用了new,所以,并不需要初始化。
比如(仅是举例)
Directory.GetFiles(string path)
{
//....
string[] destinationArray = new string[length];
//....
return destinationArray;}