鉴于下面的两个课程,我怎么能 将
List<Person>
转换为List<Person2>
?
编辑:这是一个捏造的例子。我要说的是,我无法修改Person
类,我们在实例化arbitraryNumber
时会知道List<Person2>
。
EDIT2:我知道很多人会发现这令人难以置信,但这段代码将被部署到Windows-Server-2000机器上,这意味着它必须与.NET 2.0一起使用。 [是的 - 我发现这也令人难以置信。]
public class Person
{
private string _lastName;
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
private string _firstName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
}
public class Person2 : Person
{
private readonly int _arbitraryNumber;
public Person2(int arbitraryNumber)
{
_arbitraryNumber = arbitraryNumber;
}
public string FullName
{
get
{
return String.Format("{0}, {1} - {2}", LastName, FirstName, _arbitraryNumber);
}
}
}
答案 0 :(得分:3)
我认为Person2需要改为适配器。像这样的东西
public class Person2
{
private readonly int _arbitraryNumber;
private readonly Person _person;
public Person2(Person person, int arbitraryNumber)
{
_arbitraryNumber = arbitraryNumber;
_person = person;
}
public string FullName
{
get
{
return String.Format("{0}, {1} - {2}", _person.LastName, _person.FirstName, _arbitraryNumber);
}
}
}
然后集合上的适配器更容易。
List<Person> persons = new List<Person>();
// put some people in it.
var person2s = persons.Select(p => new Person2(4, p)); // 4 chosen arbitrarily
或者对于.NET 2
List<Person2> person2s = new List<Person2>();
foreach (Person p in persons)
{
Person2 person2 = new Person2(p, 11); // 11 arbitrarily chosen by asking a kid for a number
person2s.Add(person2);
}