1

このようなことをする

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));
    }
...

もクリアされdiff.Multimea.RemoveAll(item => EqualityComparer<T>.Default.Equals(item, item)); た後。list.multiSets[i + 1]どうすればこれを解決できますか?このように接続されないように、list.multiSets[i + 1]クリアされたくありません。

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

これが役立つ場合はインデクサーです:)

4

1 に答える 1

1

list.multiSets[i+1]私もクリアされたくありません。

コピーを記入する必要があります。

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

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

于 2012-04-23T18:45:51.647 に答える