我正在用C#编程,我想定义一个我不知道它的大小的数组,因为我想从文件中读取一些东西而我不知道该文件中的元素数量。这是我的代码,我有“x”数组的问题!
using (TextReader reader = File.OpenText("Numbers.txt"))
{
string[] bits;
string text = reader.ReadLine();
int i ,j=0;
int [] x;
while (text != null)
{
i = 0;
bits = text.Split(' ');
while (bits[i] != null)
{
x[j] = int.Parse(bits[i]);
i++;
j++;
}
text = reader.ReadLine();
}
}
然后我会得到这个错误 “使用未分配的局部变量'x'” 我不知道该怎么办!!请帮帮我......
答案 0 :(得分:7)
您收到该错误是因为您没有初始化变量(除非您知道将存储在其中的项目数量,否则您无法真正执行此操作)。
由于您不知道项目数,因此您应该使用List
代替,可以根据项目数量动态扩展:
using (TextReader reader = File.OpenText("Numbers.txt"))
{
string[] bits;
string text = reader.ReadLine();
int i;
IList<int> x = new List<int>();
while (text != null)
{
i = 0;
bits = text.Split(' ');
while (bits[i] != null)
{
x.Add(int.Parse(bits[i]));
i++;
}
text = reader.ReadLine();
}
}
答案 1 :(得分:1)
对于甜蜜的单行:
int[] x = File
.ReadAllLines("Numbers.txt")
.SelectMany(s => s.Split(' ').Select(int.Parse))
.ToArray();
对于较低的内存占用率,请考虑以下替代方法:
public static IEnumerable<int> ReadNumbers()
{
using (var reader = new StreamReader(File.OpenRead("Numbers.txt."))) {
string line;
while ((line = reader.ReadLine()) != null) {
foreach (var number in line.Split(' ')) {
yield return int.Parse(number);
}
}
}
}
请注意,每次迭代ReadNumbers
的结果时,都会读取该文件。除非数字文件非常大,否则第一个解决方案就更优越了。
答案 2 :(得分:0)
问题出在这一行:
int [] x;
为什么不制作简单的清单?
List<int> myIntList = new List<int>();
您可以添加以下内容:
myIntList.Add(1);
然后像这样迭代它:
foreach(int item in myIntList)
{
Console.WriteLine(item);
}
答案 3 :(得分:0)
正如其他人所说,你需要使用一个列表。但是,除了已经说过的内容之外,您还应该将IO错误和错误数据作为最佳实践处理。对于你正在做的事情,这可能有点过分,但最好养成这种习惯。
try
{
List<int> x = new List<int>();
using (TextReader reader = File.OpenText("Numbers.txt"))
{
string text;
while ((text = reader.ReadLine()) != null)
{
string[] bits = text.Split(' ');
foreach (string bit in bits)
{
// If you're parsing a huge file and it happens to have a
// decent bit of bad data, TryParse is much faster
int tmp;
if(int.TryParse(bit, out tmp))
x.Add(tmp);
else
{
// Handle bad data
}
}
}
}
}
catch (Exception ex)
{
// Log/handle bad text file or IO
}
答案 4 :(得分:0)
这里已有一些好的答案,但只是为了好玩:
using (var reader = File.OpenText("Numbers.txt"))
{
var x = new List<int>();
var text = reader.ReadLine();
while (text != null)
{
x.AddRange(text.Split(' ').Select(int.Parse));
text = reader.ReadLine();
}
}