使用列表的链接列表

本文关键字:列表 链接 | 更新日期: 2023-09-27 18:24:14

如果我用列表模仿喜欢的列表,会有什么问题吗。

创建一个类似的类

public class MyClass
{
 //some properties
 public MyClass Previous {get; set;}
 public MyClass Next {get; set;}
}

并将其添加到通用列表中。

我只在此列表中添加元素,从不删除它们。

我没有使用.Net LinkedList类,因为我忽略了LinkedListNode类的Previous属性。我急于把事情办好。

我使用这个类的方式主要是使用List的ForEach扩展。

List<MyClass> MyList = new List<MyClass>();
//add some elements with Previous,Next set
MyList.Foreach(CalculateValues);
CalculateValues(MyClass current)
{
  MyClass prev = current.Previous; 
  //check for null and return etc
  //In some moethods I use Next
  current.SomeProperty += prev.SomeProperty; 
}

我看到LinkedList没有ForEach方法。我仍然可以使用ForEach循环进行迭代。谢谢你的回答。

使用列表的链接列表

是的,如果使用同一个类来表示项目的集合和项目本身,则会违反单一责任原则。而且您不会使用.NET库中标准的非常好的类,比如LinkedList<T>

您至少应该包含一些Item属性

public class MyClass<T>
{
 //some properties
 public MyClass Previous {get; set;}
 public MyClass Next {get; set;}
 public T Item {get; set;}
}

我建议也实现IEnumerable以获得一些迭代功能。IList似乎也很合理。但是为什么不使用内置LinkedList呢?

您的问题不在于使用Generic List来存储项目。事实上,您的类存储的是Previous/Next项,而不仅仅是关于它自身的数据。您永远无法重用链表实现。

你应该有一些东西可以在链表中存储一个节点:

public class LinkedList<T>
{
    private List<LinkedListNode<T>> nodes = new List<LinkedListNode<T>>();
}
public class LinkedListNode<T>
{
    public LinkedListNode<T> Previous { get; set; }
    public LinkedListNode<T> Next { get; set; }
    public T Item { get; set; }
}
public class MyClass
{
    // Some Properties
}