C# 如何将适配器模式应用于集合?

C# 如何将适配器模式应用于集合?,c#,design-patterns,collections,.net-2.0,adapter,C#,Design Patterns,Collections,.net 2.0,Adapter,考虑到下面的两个类,我怎么能 将列表转换为 列表 编辑:这是一个虚构的例子。我想说的一点是,我不能修改Person类,当我们实例化List时,我们就会知道arbirynumber EDIT2:我知道你们中的许多人会觉得这难以置信,但这段代码将部署到Windows-Server-2000机器上,这意味着它必须与.NET 2.0一起工作。[是的-我觉得这也令人难以置信。] public class Person { private string _lastName; public s

考虑到下面的两个类,我怎么能 将
列表
转换为
列表

编辑:这是一个虚构的例子。我想说的一点是,我不能修改
Person
类,当我们实例化
List
时,我们就会知道
arbirynumber

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);
        }
    }
}

我认为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
List persons=新列表();
//放一些人进去。
var person2s=个人。选择(p=>newperson2(4,p));//4任意选择
或.NET2

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);
}
List person2s=new List();
foreach(个人中的p个人)
{
Person2 Person2=新的Person2(p,11);//11通过向孩子索要数字而任意选择
人员2.添加(人员2);
}

您在进行这种转换时遇到了什么问题?这似乎是一件简单的事情,所以我想知道你有什么困难。Person2应该包含Person的一个实例。也许是通过使用Person字段并在构造函数中使用Person。当从
Person
创建
Person2
时,您如何知道使用哪个任意数字?@Oded:您是对的。这是一个容易的问题。我应该先喝完早上的咖啡正确-但如果您相信的话-我正在使用.NET 2.0.:)+1用于正确实现适配器模式,从而使转换变得微不足道