所以,我有这个从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个元素呢?当我运行程序时,在这个数组中我没有任何错误或任何错误。事实上,它只是在整体方案中我需要它的方式。感谢任何和所有帮助,了解它是如何以及为什么这样。还附上了截图,以获得更好的视觉辅助。
答案 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个元素之后失败。