0

リストを使用していいねリストを模倣するために次のことを行った場合、問題はありますか?

このようなクラスを作成します

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

これを汎用リストに追加します。

このリストに要素を追加するだけで、削除することはありません。

LinkedListNodeクラスのPreviousプロパティを見落としていたため、.NetLinkedListクラスを使用していません。私は物事を機能させるために急いでいました。

このクラスを使用する方法は、ほとんどの場合、リストの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

少なくともいくつかの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 に答える
3

はい、アイテムのコレクションとアイテム自体の両方を表すために同じクラスを使用することにより、単一責任の原則に違反することになります。また、.NETライブラリに標準で付属している.NETライブラリのような完全に優れたクラスを利用することはできませんLinkedList<T>

于 2012-02-13T15:26:42.987 に答える
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
}
于 2012-02-13T15:26:52.193 に答える