这实际上使我发疯,因为某些原因,我的代码无法将一个简单的int文本文件读取为int数组。
private void HardButton_Click(object sender, EventArgs e)
{
int[] hard1 = { };
int counter = 0;
using (StreamReader inFile = new StreamReader("h1.txt"))
{
string str = null;
while ((str = inFile.ReadLine()) != null)
{
hard1[counter] = Convert.ToInt32(str);
counter++;
}
}
hard1是一个整数数组,我需要通过读取文本文件来保存放入其中的每个整数。我的错误是即使我每次遍历循环,我的数组也超出范围。我很茫然。
编辑:这是输入的txt文件
0502090
6070203
0502010
5020101
0503010
4020905
0608070
7582391
6478283
8592914
5628191
6573812
4728915
3648271
答案 0 :(得分:4)
C#/。Net具有实际数组,而不是您在许多其他语言中看到的伪数组集合(它也具有这些数组,它只是不尝试将它们作为数组传递出去)。实数组的一个属性是固定大小。
因此,当您这样声明数组时:
int[] hard1 = { };
您拥有的是一个固定为大小为0的数组,因此稍后将其分配给该数组:
hard1[counter] = Convert.ToInt32(str);
没有分配给任何地方。
您有很多解决方案。这是其中之一:
private void HardButton_Click(object sender, EventArgs e)
{
var result = File.ReadLines("h1.txt").
Where(line => !string.IsNullOrWhitespace(line)).
Select(line => int.Parse(line)).
ToArray();
}
答案 1 :(得分:1)
如果您事先不知道长度,请使用列表。
private void HardButton_Click(object sender, EventArgs e)
{
var hard1 = new List<int>();
int counter = 0;
using (StreamReader inFile = new StreamReader("h1.txt"))
{
string str = null;
while ((str = inFile.ReadLine()) != null)
{
hard1.Add(Convert.ToInt32(str));
counter++;
}
}
...
如果您无法完全控制文件,则在转换为int之前可能还需要进行额外的控制。
答案 2 :(得分:0)
使用此:
private void button1_Click(object sender, EventArgs e)
{
int[] hard1 = { };
var lines = File.ReadAllLines("h1.txt");
var lineWithoutEmptySpace = lines.Where(x => !string.IsNullOrEmpty(x)).ToArray();
hard1 = new Int32[lineWithoutEmptySpace.Length];
for (var i = 0; i < lineWithoutEmptySpace.Length; i++)
{
hard1[i] = Convert.ToInt32(lineWithoutEmptySpace[i]);
}
}