如果我使用列表模仿一个喜欢的列表,会不会有任何问题。
创建一个这样的类
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循环进行迭代。 感谢所有的好答案。
答案 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
}