我正在编写一个包含一个方法的类,该方法应该在从文件读取后返回一个数组,但它总是返回一个空数组。当我在主文件中调用没有类的方法时,一切正常。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectX
{
class ReadFile
{
private System.IO.StreamReader file;
public ReadFile()
{
file = new System.IO.StreamReader(@"E:\\XXXX.csv");
}
private int DataLenght()
{
String line = String.Empty;
int lenght = 0;
line = string.Empty;
while ((line = file.ReadLine()) != null)
{
lenght++;
}
return lenght;
}
public double[] ReadFromFile()
{
double[] arr;
String line = String.Empty;
double[] data = new double[DataLenght()];
string[] dataString = new string[DataLenght()];
List<double> listaDouble = new List<double>();
int x = 0;
String[] parts_of_line;
while ((line = file.ReadLine()) != null)
{
parts_of_line = line.Split(',');
for (int i = 0; i < parts_of_line.Length; i++)
{
parts_of_line[i] = parts_of_line[i].Trim();
data[i] = double.Parse(dataString[i]);
listaDouble.Add(data[i]);
}
}
arr = listaDouble.ToArray();
return arr;
}
}
}
然后在主要我想:
ReadFile read = new ReadFile();
double[] arr = read.ReadFromFile;
很抱歉,ReadFromFile方法中几乎不需要转换,但尝试一些方法使其有效。
答案 0 :(得分:1)
你有很多问题。正如你在回答这个问题时的问题所在,你的问题是你已经阅读了这篇文章,而现在最终正如Andrei Rudik指出的那样。在每次尝试阅读之前,您必须将其重新设置为开头:
file.BaseStream.Position = 0;
但是,之后你会遇到更多问题。您的整个课程都可以对此进行重构,仔细阅读并了解正在发生的事情:
class ReadFile
{
public double[] ReadFromFile()
{
List<double> listaDouble = new List<double>();
using(var file = new System.IO.StreamReader(@"E:\XXXX.csv"))
{
string line = "";
while ((line = file.ReadLine()) != null)
{
string[] linetokens = line.Split(',');
listaDouble.AddRange(linetokens.Select (l => double.Parse(l)));
}
}
return listaDouble.ToArray();
}
}
注意,这假设你的行标记总是解析为双倍,这是一个容易出错的假设。