2010-11-27 41 views
2

鑑於以下兩類,我如何將 轉換爲List<Person>List<Person2>如何將適配器模式應用於集合?

編輯:這是一個捏造的例子。我試圖做的一點是我不能修改Person類,而當我們實例化List<Person2>時,我們會知道arbitraryNumber。我知道你們很多人會發現這個令人難以置信的,但是這個代碼將被部署到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

是你做這樣的轉換有什麼問題?這似乎是一件簡單的事情,所以我想知道你有什麼困難。 – Oded 2010-11-27 16:34:43

+1

Person2對我來說不像一個適配器。 Person2應該包含Person的一個實例。也許通過擁有Person字段並在構造函數中接受Person。 – 2010-11-27 16:36:08

回答

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