2012-02-13 13 views
0

リストを使って好きなリストを模倣するために以下のことをしても問題はありませんか?リストを使ってリンクされたリスト

この

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

ようなクラスを作成し、一般的なリストにこれを追加します。

私はこのリストに要素を追加し、削除しません。

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

私がこのクラスを使用する方法は、主にリストの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ループを使用して反復することができます。 すてきな答えをありがとう。

+1

あなたはどのような問題を期待していますか?何を試しましたか? – CodeCaster

+9

.NET [LinkedList](http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx)を使用しない理由 –

+1

時々私はコメントをdownvoteできることを望む... –

答えて

3

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

3

あなたは、少なくとも私はいくつかの反復の機能を取得するには、あまりにもIEnumerableを実装することをお勧めザ・一部Itemプロパティ

public class MyClass<T> 
{ 
//some properties 
public MyClass Previous {get; set;} 
public MyClass Next {get; set;} 
public T Item {get; set;} 
} 

を含める必要があります。 IListも妥当と思われます。しかし、組み込みのLinkedListを使ってみませんか?

2

あなたの問題は、一般的なリストを使ってアイテムを保管することではありません。あなたのクラスはそれ自体のデータではなく、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 
} 
+0

'T'ではなく' public LinkedListNode Previous/next'でなければなりませんか? – Skalli

+0

@Skalli - そうすべきです。一定。 –

関連する問題