为什么阵列中的元素多于我定义的元素?

时间:2012-11-07 20:33:56

标签: c# arrays

所以,我有这个从INI文件中读取的函数:

private void GetRigInfo()
{
    RigInfo = new string[9];
    var fileLocation = new string[2];

    // The problem is that there's no telling where the hddrigsite.ini will be 
    stored.  So, we have to find out where it is from the hddconfig.ini.
    Log("Locating rig info");

    // There's no telling if this will be on a 32 or 64 bit OS.  Check for both
    var rigInfoLocation = File.ReadAllLines(Environment.Is64BitOperatingSystem ?
                          @"C:\Program Files (x86)\HDD DrillView\hddconfig.ini" : 
                          @"C:\Program Files\HDD DrillView\hddconfig.ini");

    // This should get us the location of the rigsite info we need.
    foreach (var s in rigInfoLocation.Where(s => s.Contains("data_dir")))
    {
        fileLocation = s.Split('=');
    }

    RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");

    Log("Rig info found");
}

现在,当我单步执行并转到函数中的最后一个Log(),并将鼠标悬停在RigInfo上时,Visual Studio intellisense会向我显示RigInfo{string[30]}。现在,我一直都明白= new string[9]会创建一个9元素数组。那为什么它允许有30个元素呢?当我运行程序时,在这个数组中我没有任何错误或任何错误。事实上,它只是在整体方案中我需要它的方式。感谢任何和所有帮助,了解它是如何以及为什么这样。还附上了截图,以获得更好的视觉辅助。

Confusing intellisense

7 个答案:

答案 0 :(得分:5)

这里:

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");

您正在为变量分配新值。在这种情况下,新字符串为[]。

答案 1 :(得分:4)

因为您已在此行中更改了存储在变量中的引用:

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");

答案 2 :(得分:3)

你所做的是你在

上用一个全新的数组覆盖你的9元素阵列
RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");

答案 3 :(得分:2)

ReadAllLines调用'重新定义'数组。如果你已经通过索引将每一行分配给数组,那么你就会得到一个错误,但是在这种情况下,你将指针从分配给你的数组的内存重定向,并将它指向ReadAllLines方法的输出。

总是厌倦了Arr = somthing,因为这会改变数组引用本身。

答案 4 :(得分:1)

您为其分配File.ReadAllLines,因此将分配新内存,并且该阵列是一个全新的阵列。您基本上会覆盖以前的作业。

答案 5 :(得分:1)

RigInfo包含超过预期的9个元素,因为这一行:

RigInfo = File.ReadAllLines(fileLocation [1] +“\ hddrigsite.ini”);

丢弃原始RigInfo并创建一个 new 字符串数组,其结果为File.ReadAllLines(fileLocation [1] +“\ hddrigsite.ini”)

答案 6 :(得分:0)

RigInfo = File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");,您要将new array File.ReadAllLines(fileLocation[1] + "\\hddrigsite.ini");大小30的{​​{1}}分配给RigInfo变量。

如果你这样做

  RigInfo [indx++] = one line at a time

然后当你使用之前定义的数组时,它将在第9个元素之后失败。