2012-01-19 43 views
-1

我想新建一個包含了某些人的姓名,年齡和地址的鏈表,到目前爲止,我創建的代碼:問題用鏈表

LinkedList<string> details = new LinkedList<string>(); 

    details.AddFirst("Name1"); 
    details.AddLast("Name2"); 
    details.AddLast("Name3"); 

    foreach (var display in details) 
    { 
     Console.WriteLine(display); 
    } 

確定,所以現在它工作正常,但我只是輸入名稱,我如何輸入年齡和地址,是否像數組?我只是不`噸瞭解不多linkedlists的,也是我試圖刪除LinkedList的一些節點,但我失敗了:

foreach (var item in details) 
    { 
     if (item.Contains("Name3")) 
     { 
      details.Remove(item); 
     } 
    } 

,但我得到這個錯誤:

Unhandled Exception: System.InvalidOperationException: Collection was modified after the enumerator was instantiated. 

最後,如何能我編輯鏈接列表項目,比如將Name2重命名爲Name13或任何其他內容,我將非常感謝任何幫助,只要給我想法,我就會繼續挖掘。提前致謝 。

+1

不能添加/刪除在foreach循環從集合項目 - 一個異常將被拋出(正如你所看到的) – 2012-01-19 01:29:49

回答

2

如果您希望在列表中添加額外的信息,只需創建一個封裝該信息的類,因爲LinkedList是一個通用類型。例如:

//Structure to hold extra information 
public class PersonDetails 
{ 
    public string Name {get; private set;} 

    public int Age {get; private set;} 

    public string Address {get; private set;} 

    //Constructor 
    public PersonDetails(string name, int age, string address) 
    { 
    this.Name = name; 
    this.Age = age; 
    this.Address = address; 
    } 
} 

然後你就可以創建一個包含這些類型的一個新的鏈接列表:

LinkedList<PersonDetails> list = new LinkedList<PersonDetails>(); 
list.AddFirst(new PersonDetails("Name", 22, "Address")); 

注意,當你在枚舉它,你不能修改的集合,需要執行的檢查和修改它在你的foreach循環之外。

5

使用foreach循環迭代列表時,無法從列表中刪除元素。

if (details.Remove("Name3")) 
    Console.WriteLine("Removed"); 
else 
    Console.WriteLine("Not Found"); 
3

鏈接列表就像一個數組,它是一個數據集合。列表中的每個項目都會存儲到下一個項目(通常是前一個項目)的鏈接,因此也就是名稱。

您無法修改正在循環的列表,因爲您對列表的引用將無效。

+0

對列表的引用不是無效的......只是枚舉器處於無效狀態。 – 2012-01-19 01:33:04

+0

我不是指列表引用,引用。即如果你刪除了你當前所在的項目,那麼你打破了統計員。 – 2012-01-19 01:34:45

1

如果你可以使用LINQ,您可以將您的代碼轉換爲LINQ的方法,如:

details = details.Where(item => !item.Contains("Name3")).ToList();