2013-02-01 48 views
-6

說我有一個這樣的類:如何操作對象的屬性已被添加到列表中的C#後

class public Person 
{ 
    public string firstName; 
    public string lastName; 
    public string address; 
    public string city; 
    public string state; 
    public string zip; 

    public Person(string firstName, string lastName) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

而且我們進一步說,我創建一個類型的人的名單如下:

List<Person> pList = new List<Person>; 
pList.Add(new Person("Joe", "Smith"); 

現在,我想爲Joe Smith設置地址,城市,州和郵編,但我已經將該對象添加到列表中。那麼,我該如何設置這些成員變量,之後的這個對象已經被添加到列表中了?

謝謝。

+4

你真的不應該被公開曝光的領域;使用屬性會更合適。感謝自動實現的屬性,這是非常少的額外努力。 – Servy

+0

我很欣賞這個建議。你能用一個例子來進一步闡述嗎? – user717236

+2

谷歌是有原因的。用它。 – Servy

回答

2

您可以獲取列表的第一個項目,像這樣:

Person p = pList[0];Person p = pList.First();

然後當你願意,你可以修改它:

p.firstName = "Jesse";

而且,我會建議使用自動屬性:

class public Person 
{ 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string address { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    public string zip { get; set; } 

    public Person(string firstName, string lastName) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

你會得到相同的結果,但是,你要驗證輸入或更改您設置的項目的方式,一天,它會簡單得多:

class public Person 
{ 
    private const int ZIP_CODE_LENGTH = 6; 
    public string firstName { get; set; } 
    public string lastName { get; set; } 
    public string address { get; set; } 
    public string city { get; set; } 
    public string state { get; set; } 
    private string zip_ = null; 
    public string zip 
    { 
     get { return zip_; } 
     set 
     { 
      if (value.Length != ZIP_CODE_LENGTH) throw new Exception("Invalid zip code."); 
      zip_ = value; 
     } 
    } 

    public Person(string firstName, string lastName) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

很有可能不當你在這裏設置一個屬性時,最好的決定就是崩潰,但是你能夠快速改變一個對象的設置,而不需要在任何地方調用一個函數。這是封裝OOP的全部魔力。

4

你得到的項背出來的列表,然後將其設置:

pList[0].address = "123 Main St."; 
+0

非常感謝。我很感激。 – user717236

3

你可以把你的對象的引用左右。嘗試像這樣添加:

List<Person> pList = new List<Person>; 
Person p = new Person("Joe", "Smith"); 
pList.Add(p); 
p.address = "Test"; 

或者,您可以直接通過列表訪問它。

pList[0].address = "Test"; 
+0

呃,不,實際上,你不需要保留一個參考。你可以*,但你不需要*。 – Servy

1

您可以通過它的索引訪問該項目。如果你想找到最後產品加入,那麼你可以使用長度 - 您的清單1:

List<Person> pList = new List<Person>; 
// add a bunch of other items.... 
// .... 
pList.Add(new Person("Joe", "Smith"); 
pList[pList.Length - 1].address = "...."; 
1

如果你已經失去了跟蹤你在你的列表中尋找元素,可以隨時使用LINQ再次找到元素:

pList.First(person=>person.firstName == "John").lastName = "Doe"; 

或者,如果你需要重新定位所有的「李四」 S一次,你可以這樣做:

foreach (Person person in pList.Where(p=>p.lastName == "Doe")) 
{ 
    person.address = "Niflheim"; 
} 
相關問題