2012-03-20 138 views
6

我有一个列表如何从现有列表创建新列表?

List<Student> 

class Student{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string School { get; set; } 
} 

我想使用上述清单中创建或数据填充到

List<Person> 

class Person{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

帮助我..

感谢名单

+0

不类'Person'和'Student'有某种关系呢? – 2012-03-20 11:00:50

回答

17

这应该做的伎俩

List<Person> persons = students.Select(student => new Person {FirstName = student.FirstName, LastName = student.LastName}).ToList(); 
+1

+1 linq是去这里的方法...如果你避免这样的事实,它看起来像'学生'应该继承'人'。 – Mizipzor 2012-03-20 11:02:20

7

也许最简单的解决方案是从人(学生是人)继承学生。

这样你就不必复制/转换列表了。

结果会是这样的(没有IDE完成):

列表

public class Person{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

class Student : Person{ 
    public string School { get; set; } 
} 

List<Student> ... 

List<Person> ... 
2

如果StudentPerson之间没有明确的遗传你可以使用投影:

List<Student> ls = ...; 

List<Person> lp = 
    ls.Select( 
    student => 
     new Person() 
     { 
      FirstName = student.FirstName, 
      LastName = student.LastName 
     }); 
1

比方说,我们有

List<Student> k= new List<Student>(); 
//add some students here 
List<Person> p= k.select(s=>new Person() { FirstName = student.FirstName, LastName = student.LastName }); 
1

保持个人类如。

class Person { 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

充分利用Student类从Person派生并添加学校财产。

class Student : Person { 
    public string School { get; set; } 
} 

现在,您可以添加到StudentPerson的List。

var persons = new List<Person>(); 
persons.Add(new Student()); 
1

您可以通过以下方式填写数据到另一个列表:

listPerson = (from student in listStudent 
          select new Person 
          { 
           FirstName = student.FirstName, 
           LastName = student.LastName 
          }).ToList<Person>();