链接列表的问题
本文关键字:问题 列表 链接 | 更新日期: 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();