2012-01-19 48 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();