链接列表的问题

本文关键字:问题 列表 链接 | 更新日期: 2023-09-27 18:20:48

i想要创建一个包含一些人的姓名、年龄和地址的链表,到目前为止我创建了代码:

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

链接列表的问题

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

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

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

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

如果您希望在列表中添加额外的信息,只需创建一个封装该信息的类,因为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循环之外执行检查并修改它。

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

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