C# 从顺序文件读入结构数组

C# 从顺序文件读入结构数组,c#,arrays,file,struct,C#,Arrays,File,Struct,我有以下结构: public struct StudentDetails { public string unitCode; //eg CSC10208 public string unitNumber; //unique identifier public string firstName; //first name public string lastName;// last or family name

我有以下结构:

    public struct StudentDetails
    {
        public string unitCode; //eg CSC10208
        public string unitNumber; //unique identifier
        public string firstName; //first name
        public string lastName;// last or family name
        public int studentMark; //student mark
    }
使用该结构,我将数据写入一个顺序文件。文件中的数据如下所示:

ABC123
1
John
Doe
95
DCE433
3
Sherlock
Holmes
100
ASD768
5
Chuck
Norris
101
等等


从该文件中读取数据并将其加载到结构数组中的最佳方法是什么?

最初,我会使用某种方式写入该文件,因为它也会处理读取部分。
但是考虑到您创建文件的方式,我将不再使用它的ReadLine()方法,因为您知道您写入服务器的属性的顺序很简单:

string line = "";
while ((line = reader.ReadLine()) != null)
{
  YourStruct t = new YourStruct();
  t.unitCode = line;
  t.unitNumber = reader.ReadLine();
  ...
  resultArray.Add(t);
}
reader.Close(); reader.Dispose();

假设文件每行一个值:

List<StudentDetails> studentList = new List<StudentDetails>();

using (StreamReader sr = new StreamReader(@"filename"))
{

    while (!sr.EndOfStream)
    {
        StudentDetails student;

        student.unitCode = sr.ReadLine();
        student.unitNumber = sr.ReadLine();
        student.firstName = sr.ReadLine();
        student.lastName = sr.ReadLine();
        student.studentMark = Convert.ToInt32(sr.ReadLine());

        studentList.Add(student);
    }

    StudentDetail[] studentArray = studentList.ToArray();

}
然后,您可以简单地在阵列中循环:

for (int i = 0; i < studentArray.Length; i++)
{
    Console.WriteLine("Student #{0}:", i);
    Console.WriteLine(studentArray[i]);
    Console.WriteLine();
}
for(int i=0;i
字符串是固定大小还是变量?@BrokenGlass:variable,因为名字和姓氏的长度不同
(line=reader.ReadLine())!=while循环中的null
条件将丢弃该行,因为您在while循环中不使用它。该代码可以工作,但studentArray除了CA4.Program.StudentDetails之外不打印任何内容,有什么想法吗?根据您前面的问题,看起来您需要重写
ToString()
结构中的方法。你能发布执行不正常的代码吗?请参阅我编辑的答案。
for (int i = 0; i < studentArray.Length; i++)
{
    Console.WriteLine("Student #{0}:", i);
    Console.WriteLine(studentArray[i]);
    Console.WriteLine();
}