0

如果我做以下使用列表来模仿喜欢的列表会不会有任何问题。

像这样创建一个类

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

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

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

我没有使用 .Net LinkedList 类,因为我忽略了 LinkedListNode 类的 Previous 属性。我急于让事情顺利进行。

我使用此类的方式主要是使用列表的 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 循环进行迭代。感谢所有伟大的答案。

4

3 回答 3

3

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

于 2012-02-13T15:26:42.987 回答
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呢?

于 2012-02-13T15:25:47.313 回答
2

您的问题不在于使用通用列表来存储您的项目。事实上,您的班级正在存储上一个/下一个项目,而不仅仅是关于自身的数据。您将永远无法重用 Linked List 实现。

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

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
}
于 2012-02-13T15:26:52.193 回答