使用列表的链接列表

时间:2012-02-13 15:22:29

标签: c# list doubly-linked-list

如果我使用列表模仿一个喜欢的列表,会不会有任何问题。

创建一个这样的类

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循环进行迭代。 感谢所有的好答案。

3 个答案:

答案 0 :(得分:3)

您至少应该包含一些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

答案 1 :(得分:3)

是的,您将违反单一责任原则,方法是使用同一个类来表示项目集合和项目本身。而且你不会使用.NET库标准的完美的类,比如LinkedList<T>

答案 2 :(得分:2)

您的问题不在于使用通用列表来存储您的商品。事实上,您的类存储的是上一个/下一个项目,而不仅仅是存储有关自身的数据。您永远无法重新使用链接列表实现。

您应该在链接列表中存储节点:

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
}