我有一个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;解析字符串。如何以最快的方式转换我的列表?
答案 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])
});
}