将字符串数组转换为对象的最快方法

时间:2015-10-29 16:25:50

标签: c# .net type-conversion

我有一个List<string[]> stringStudentList,其中每个学生数组都包含所有属性的字符串。我需要以最快的方式将其转换为对象Student。

例如,string[] student1 = {"Billy", "16", "3.32", "TRUE");需要转换为类:

class Student
{
    string name { get; set; }
    int age { get; set; }
    double gpa { get; set; }
    bool inHonors { get; set; }
}

然后插入List<Student>stringStudentList中有数百万学生,所以这必须尽可能快。我目前正在关注this sample,它抓取CSV文件中的数据,但速度太慢 - 需要花费几分钟时间来转换&amp;解析字符串。如何以最快的方式转换我的列表?

3 个答案:

答案 0 :(得分:3)

new Student添加到pre-allocated list的常规循环会非常快:

//List<string[]> stringStudentList
var destination = new List<Student>(stringStudentList.Length);
foreach(var r in stringStudentList)
{
   destination.Add(new Student 
    {
      name =r[0],
      age = int.Parse(r[1]),
      gpa = double.Parse(r[2]),
      inHonors = r[3] == "TRUE"
    });
}

答案 1 :(得分:3)

您可以为Student创建一个以string[]为参数的构造函数:

Student(string[] profile)
{
    this.name = profile[0];
    this.age = int.Parse(profile[1]);
    this.gpa = double.Parse(profile[2]);
    this.inHonor = bool.Parse(profile[3]);
}

但是,我认为你应该在这种情况下真正研究序列化。

答案 2 :(得分:1)

这样的事情应该有效

var list students = new List<Student>();

foreach(var student in stringStudentList)
{
   students.Add(new Student
   {
       name = student[0]
       age = int.Parse(student[1]),
       gpa = double.Parse(student[2]),
       inHonors = bool.Parse(student[3])
   });
}