2012-04-23 8 views
1

diff.Multimea.RemoveAll(item => EqualityComparer<T>.Default.Equals(item, item)); list.multiSets[i + 1]があまりにもクリアされた後、このC#変数接続

public Multime<T> Difference(Multime<T> list) 
{ 
    Multime<T> diff = new Multime<T>(); 
    for (int i = 0; i < list.Multisets.Count() - 1; i++) 
    { 
     foreach (T el in list.multiSets[i].Multimea) 
     { 
      if (!(list.multiSets[i + 1].Multimea.Exists(element => EqualityComparer<T>.Default.Equals(element, el)))) 
       diff.Multimea.Add(el); 

     } 
     list.multiSets[i + 1] = diff; 
     if (i < list.multiSets.Count() - 1) 
      diff.Multimea.RemoveAll(item => EqualityComparer<T>.Default.Equals(item, item)); 
    } 
... 

のようなものをやって。どのように私はこれを解決することができますので、彼らはこの方法で接続されていない、私はlist.multiSets[i + 1]をクリアする必要はありません。

public Multime<T> this[int index] 
{ 
    get { return this.multiSets[index]; } 
    set { this.multiSets[index] = value; } 
} 

それは場合に役立ちます:)

+0

私はこの質問を少し編集しました。私がそれをクリアするのに間違いを犯したかどうかを教えてください。 –

答えて

1

を私はlist.multiSets[i+1]があまりにもクリアされたくない、これはインデクサーです。

あなたはコピーして、それを埋めるために必要があります:

//list.multiSets[i + 1] = diff; 
    list.multiSets[i + 1] = diff.ToList(); 

あなたdifflist.multiSets[x]値は参照型です。つまり、元の割り当てでは、リスト自体ではなく、リストへの参照のみがコピーされます。 ToList()は、リストのクローンを作成するコンパクトな方法です。