Supponiamo di avere una situazione schematizzata dal seguente Class Diagram:
Supponiamo di avere un unico metodo Add che aggiunge oggetti di tipo Person ad una lista tipizzata denominata People, come nel caso seguente:
1
2 List<Person> _people = new List<Person>();
3
4 private void Add(Person p)
5 {
6 _people.Add(p);
7 }
Utilizziamo il seguente codice per popolare la collezione People :
1 Employee e = null;
2 e = new Employee();
3 e.Age = 21;
4 e.Name = "Peter";
5 e.Surname = "Book";
6 e.Office = "Piazzale Kennedy 21";
7
8 Add(e);
9
10 e = new Employee();
11 e.Age = 23;
12 e.Name = "Anna";
13 e.Surname = "Rossi";
14 e.Office = "Via Ammiraglio Cagni 36";
15
16 Add(e);
17
18 e = new Employee();
19 e.Age = 35;
20 e.Name = "Mario";
21 e.Surname = "Rossi";
22 e.Office = "Via Duca degli Abruzzi";
23
24 Add(e);
Se volessimo convertire la nostra lista tipizzata di oggetti Person in una lista tipizzata di oggetti Employee:
1 List<Employee> employees = new List<Employee>();
possiamo seguire due strade, la prima è utilizzare un ciclo foreach:
1 foreach (Person p in _people)
2 employees.Add((Employee)p);
La seconda è quella di utilizzare il metodo generico ConvertAll<> che esegue la conversione di un Array di un tipo, Person in questo caso, in un Array di un'altro tipo,Employee, utilizzando un Converter, ovvero un metodo che esegue la conversione di un tipo in un altro. In soldoni (righe di codice :-) ):
Il Converter
1 private Employee PersonEmployeeeConverter(Person p)
2 {
3 if (p.GetType() == typeof(Employee))
4 return (Employee)p;
5 else
6 return null;
7 }
Il codice di conversione:
1 employees = _people.ConvertAll<Employee>(new Converter<Person, Employee>(PersonEmployeeeConverter));
Osservazioni: ConvertAll<> e il concetto di Converter sono stati introdotti con il .Net Framework 2.0
Technorati Tag:
ConvertAll<>