我想创建一个链接列表,其中包含某些人的姓名,年龄和地址,到目前为止我创建了该代码:
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或其他任何东西,我真的很感激任何帮助,只要给我一个想法,我将继续挖掘。提前谢谢。
答案 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();