0

クラスXのオブジェクトの数を含むリストがあります。

関数を介して1つのオブジェクトを追加するcloneと、独自のインデックスが取得されますが、クローンを使用してもう1つのオブジェクトを追加すると、オブジェクトは最初のクローンと同じインデックスを受け取ります。

ここにいくつかのコードがあります:

public void AddCopyObj(List<x> MyList, int Idx)
{
  x AddCloneObj=MyList[Idx].Clone();
  MyList.Insert(Idx+1,AddCloneObj)
}

public List<int> GetAllIndexs(List<x> MyList)
{
  List<int> IndexList = new List<int>();
  foreach(x myXvar in MyList)
  {
    IndexList.add(MyList.IndexOf(myXvar));
  }
  return IndexList ;
}

:クローンを2回作成したオブジェクトの1つに10個のオブジェクトがある場合、12個のオブジェクトがあり、両方のクローンのインデックスは同じです(同じインデックスに配置されていない場合、関数IndexOfは同じものを返します)

私に何ができる?

編集:

public x Clone()
    {
        x clone = new x(Int32.Parse(this.Name.Split(new char[1] { ' ' })[1]) + 1);
        clone.Copy(this);
        return clone;
    }
4

2 に答える 2

2

MSDNからの引用(私自身を強調):

指定されたオブジェクトを検索し、指定されたインデックスから最後の要素までのリスト内の要素の範囲内で最初に出現したゼロベースのインデックスを返します。

それらは両方とも基本的に最初の出現と一致しています。これは、あなたが持っているアイテムの平等に要約されList<>ます、それはデフォルトの平等比較器を使用します:

このメソッドは、リスト内の値のタイプであるTのデフォルトの等式比較子EqualityComparer.Defaultを使用して等式を判別します。

http://msdn.microsoft.com/en-us/library/e4w08k17.aspx

開始インデックスを取得するオーバーライドを使用して、以前のインデックスを検索から除外できます。

http://msdn.microsoft.com/en-us/library/s8t42k5w.aspx

または、ハッシュと同等性に基づいて一意のアイテムを保持する場合は、HashSet<T>代わりにを使用します。

コードサンプルを提供することを考えましたが、提供するコードを見ると、意味がなくなります。現在のサンプルでは、​​アイテムをインデックス順にループし、インデックスを別のリストに追加します。重複するアイテムの場合のみ、同じインデックスになります。一歩後退して、あなたは何を達成しようとしていますか?もっと良い選択肢があると思います。

于 2013-02-13T13:04:04.763 に答える