链接列表的问题

时间:2012-01-19 01:26:29

标签: c# linked-list

我想创建一个链接列表,其中包含某些人的姓名,年龄和地址,到目前为止我创建了该代码:

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

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

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

好吧所以现在它工作正常,但我只输入名称,我如何输入年龄和地址,是否像数组一样?我只是不太了解链接列表,我也试图删除链接列表的一些节点,但我失败了:

    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或其他任何东西,我真的很感激任何帮助,只要给我一个想法,我将继续挖掘。提前谢谢。

4 个答案:

答案 0 :(得分:5)

使用foreach循环迭代列表时,无法从列表中删除元素。

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

答案 1 :(得分:3)

链表就像一个数组,因为它是一个数据集合。列表中的每个项目都存储指向下一个项目(通常是前一个项目)的链接,因此名称为。

您无法修改正在循环的列表,因为您对列表的引用将无效。

答案 2 :(得分: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循环之外修改它。

答案 3 :(得分:1)

如果您可以使用LINQ,则可以将代码转换为linq方法,例如:

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