使用列表的链接列表
本文关键字:列表 链接 | 更新日期: 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
}